被调用的 sinon.spy 函数没有声明它已被调用
A sinon.spy function that is called does not state it has been called
我正在尝试模拟一个 EmberJS 适配器,它具有执行 POST 请求的功能。我的测试看起来像这样:
test('should post something', async function (assert) {
let controller = this.owner.lookup('path/to/ach-deposit');
controller.setProperties({
...,
store: {
adapterFor: () => {
return {postAchDeposit: sinon.spy()}
}
}
})
await controller.actions.postAchDepositHandler.call(controller);
assert.ok(controller.store.adapterFor.call().postAchDeposit.called);
})
这失败了。进入调用 postAchDeposit 的代码不会引发任何错误。如果我要将 sinon.spy()
更改为 sinon.stub().return("Hi")
它将 return Hi
但是无论出于何种原因,当我尝试查看它是否已被调用时,它 returns假的。
在调用 postAchDeposit 后的调试器中,如果我使用 this.get('store').adapterFor('funding/ach-deposit').postAchDeposit.called
检查那里,它仍然 returns false。
我错过了什么?
每次调用 adapterFor
sinon.spy()
都会再次调用,因此会创建一个新的间谍。
所以要点:
controller.store.adapterFor().postAchDeposit !== controller.store.adapterFor().postAchDeposit
您可能应该先创建存根,然后始终传递引用:
const postAchDeposit = sinon.spy();
controller.setProperties({
...,
store: {
adapterFor: () => {
return {postAchDeposit}
}
}
});
await controller.actions.postAchDepositHandler.call(controller);
assert.ok(postAchDeposit.called);
我正在尝试模拟一个 EmberJS 适配器,它具有执行 POST 请求的功能。我的测试看起来像这样:
test('should post something', async function (assert) {
let controller = this.owner.lookup('path/to/ach-deposit');
controller.setProperties({
...,
store: {
adapterFor: () => {
return {postAchDeposit: sinon.spy()}
}
}
})
await controller.actions.postAchDepositHandler.call(controller);
assert.ok(controller.store.adapterFor.call().postAchDeposit.called);
})
这失败了。进入调用 postAchDeposit 的代码不会引发任何错误。如果我要将 sinon.spy()
更改为 sinon.stub().return("Hi")
它将 return Hi
但是无论出于何种原因,当我尝试查看它是否已被调用时,它 returns假的。
在调用 postAchDeposit 后的调试器中,如果我使用 this.get('store').adapterFor('funding/ach-deposit').postAchDeposit.called
检查那里,它仍然 returns false。
我错过了什么?
每次调用 adapterFor
sinon.spy()
都会再次调用,因此会创建一个新的间谍。
所以要点:
controller.store.adapterFor().postAchDeposit !== controller.store.adapterFor().postAchDeposit
您可能应该先创建存根,然后始终传递引用:
const postAchDeposit = sinon.spy();
controller.setProperties({
...,
store: {
adapterFor: () => {
return {postAchDeposit}
}
}
});
await controller.actions.postAchDepositHandler.call(controller);
assert.ok(postAchDeposit.called);