При разработке вашей заглушки она будет возвращать новый объект каждый раз, когда вызывается controller.model
.В результате:
controller.model === controller.model // false
Поэтому, когда вы пытаетесь шпионить за свойством find
controller.model
с помощью:
const spyFind = sinon.spy(controller.model, 'find');
Sinon захватывает объект, возвращаемый controller.model
, и заглушкиfind
на этот объект.В следующий раз, когда вы вызовете controller.model
, например, в своем тесте, вы получите свежий объект из controller.model
, за которым не следят.Таким образом, первоначальный шпион никогда не вызывается.
Я думаю, что лучший подход - предоставить отдельный заглушку, возвращаемую find()
, тогда вы можете определить, называется ли заглушка:
const sinon = require('sinon')
let controller = {
get model() { return schema},
async findUser(data) {
const data = await this.model.find({ id: data.id });
return data;
}
}
let findStub = sinon.stub()
findStub.returns({ username: 'asdf' })
sinon.stub(controller, 'model').get(() => ({
find: findStub
}));
console.log(controller.model.find()) // { username: 'asdf' }
console.log(findStub.calledOnce); // true