我有一个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方法?谢谢~~
答案 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);
});