【发布时间】:2016-11-26 17:39:07
【问题描述】:
我正在模拟 Sequelize 查找调用,然后在 Promise.resolve() 中返回对象之前修改结果;
这是我的简化代码;
test.js
test('can pass test', t => {
let mock_instance = models.myModel.build({
a_property: 5
});
let Stub = sandbox.stub(models.myModel, 'find', () => {
return Promise.resolve(mock_instance);
});
models.myModel.functionCall(mock_instance.id).then(returned_object => {
let expected = {
a_property: 6
};
t.equal(returned_object.get({plain:true}), expected);
// Expected { a_property: 6 }
// Actual { a_property: 5 }
Stub.restore();
t.end();
});
})
model.js // 类方法
classFunction: (id) => {
return new Promise((resolve, reject) => {
return sequelize.models.myModel.find({
where: {
id: id
}
}).then(mymodel => {
mymodel.a_property++;
resolve(mymodel);
}).catch(err => {
reject(err);
});
});
为什么会这样?我认为这与 Sinon 拦截了 resolve 认为这是 find() 调用的结果有关,但我不确定,也不知道如何解决。
这是一种反模式吗?有没有更好的办法?
【问题讨论】:
标签: javascript promise sinon