Tecnicamente, devi prendere in giro tutto ciò che ti accede dalla tua unità, altrimenti stai testando la tua unità di codice e il codice a cui fa riferimento. Ora, ovviamente, questo può essere poco pratico nel mondo reale, quindi tendiamo a prendere in giro solo gli aspetti più importanti del codice, ad esempio se la tua classe di strade chiama DB per ottenere alcuni dati, prenderemmo in giro l'intera interfaccia nel DB.
Sta a te quanti sforzi hai messo per rendere il tuo codice ridicolo, a volte può essere un vero problema alterare il tuo codice in modo che usi le interfacce (soggetto a linguaggio che richiede questo, ad esempio .net, YMMV con javascript), ma può anche essere una buona pratica farlo. Il trucco è sapere fino a che punto lungo quella strada da percorrere - troppo e hai un codice non gestibile che è così disaccoppiato che puoi richiedere giorni per rintracciare quello che dovrebbe fare.
Non hai bisogno di un factory, usa invece un framework di simulazione che sostituirà automaticamente le chiamate al tuo oggetto mocked con il suo che restituisce un risultato fisso, es. da Sinon.js