Take a look to sinon-mongoose. You can expects chained methods with just a few lines:
// If you are using callbacks, use yields so your callback will be called
sinon.mock(YourModel)
.expects('findById').withArgs('abc123')
.chain('exec')
.yields(someError, someResult);
// If you are using Promises, use 'resolves' (using sinon-as-promised npm)
sinon.mock(YourModel)
.expects('findById').withArgs('abc123')
.chain('exec')
.resolves(someResult);
You can find working examples on the repo.
Also, a recommendation: use mock
method instead of stub
, that will check the method really exists.