"然后"中的一个sinonjs存根。

时间:2017-10-24 09:06:00

标签: javascript sinon

我有一个A类,我想测试eventHandler方法。

class A () {
    eventHandler (controller) {
        controller.exec().then((() => {
            this._afterHandler();  // I can't stub it.
        }))
     // this._afterHandler();  // I can  stub it !!!
    }


    _afterHandler() {
        xxxxx...;
    }
}

这是我的测试代码。我发现我无法存根_afterHandler方法。当时的方法在那。但是当我把方法移到"然后"外。我可以存根。

 it('xxxx', () => {
      const a = new A();
      const stub = sinon.stub(a,'_afterHandler');
      a.eventHandler({ exec: () => {return Promise.resolve(1)} })

      sinon.assert.calledOnce(stub);
    });

如何存根_afterHandler方法?谢谢~~

1 个答案:

答案 0 :(得分:0)

_afterHandler 正在被Sinon抄截。

这里的问题是 sinon.assert.calledOnce(stub)在存根 _afterHandler 之前被调用 - 这要归功于使用promises。

在使这个可测试的方面,一个选项是:

class A {
  eventHandler (controller) {
    return controller.exec().then(() => {
      this._afterHandler();
    })
  }

  _afterHandler() {
    xxxxx...;
  }
}

和测试:

it('xxxx', async () => {
  const a = new A();
  const stub = sinon.stub(a,'_afterHandler');
  await a.eventHandler({ exec: () => {return Promise.resolve(1)} });

  sinon.assert.calledOnce(stub);
});