被调用的 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);