我有一些代码在承诺解决后执行。我试图窥探一个应该在承诺解决后调用的方法,但是我在调用spied on方法之前完成执行时遇到问题。
如何测试storage.add
的来电实际上是在制作?
以下是测试:
"it marks true in storage": function() {
sinonSandbox.stub(tested, "updateServiceApi", function() {
return MPromise.resolve();
});
var storageStub = sinonSandbox.stub(storage, "add");
tested._execute();
expect(
storageStub.calledWith("name", true)
).to.be.true
}
以下是实施:
_execute: function() {
this.updateServiceApi().then(function(){
// tests finish before this code is executed :(
storage.add("name", true);
});
},
答案 0 :(得分:0)
这里的问题是您已经编写了测试,好像_execute
是同步的。
由于承诺,expect
来电将在storage.add()
来电之前执行。
你究竟如何处理这个问题将取决于测试运行,但一般的解决方法是在测试中为被调用的函数添加.then()
,其中包含expect
代码。
"it marks true in storage": function() {
sinonSandbox.stub(tested, "updateServiceApi", function() {
return MPromise.resolve();
});
var storageStub = sinonSandbox.stub(storage, "add");
return tested._execute()
.then(() => {
expect(storageStub.calledWith("name", true)).to.be.true;
});
}