Technically, you need to mock everything that is accessed from your unit, otherwise you're testing your unit of code and the code that it references. Now, obviously this can be impractical in the real world, so we tend to mock only the bigger aspects of the code, eg if your roads class called a DB to get some data, we'd mock the entire interface to the DB.
Its up to you how much effort you put in to make your code mockable, sometimes it can be a real pain altering your code so it uses interfaces (subject to language that requires this, eg .net, YMMV with javascript), but also it can be good practice to do this. The trick is knowing how far down that road to travel - too much and you have unmaintainable code that's so decoupled you can take days to trace what its supposed to do.
You don't need a factory, instead use a mocking framework that will automatically replace calls to your mocked object with its own that returns a fixed result, eg from Sinon.js