Mongoose is copying the methods defined in the schema to the model prototype and only those methods are used. So even though
User.schema.methods.doSomething === User.prototype.doSomething
if you set:
spyOn(User.schema.methods, 'doSomething')
it won't get called - User.prototype.doSomething
will. Your guess was right, you should just use:
spyOn(User.prototype, 'doSometing');
Don't forget to use and.callThrough
if you want to have the original method called after setting up the spy (I fell for that).