我想为具有承诺的特定函数编写一些单元测试,但是,在测试完成后,promise会解决。例如:
function systemUnderTest(promise, cb) {
return promise.then(data => {
console.log('>>>', data);
cb(data);
});
}
it('resolves and calls the sampleFunc', () => {
const spyCallback = spy(data => data)
systemUnderTest(Promise.resolve(42), spyCallback);
expect(spyCallback.callCount).to.equal(1);
});
我可以看到我的log
语句在测试完成后触发,所以当断言运行时,callCount
显然是0
,因为它当时没有运行但是很久以后。
有什么想法吗?
答案 0 :(得分:0)
由于您正在传递一个回调,因此窥探它并没有多大意义。但这是一个例子(只是替换你自己的承诺):
it('some test',function(done){
const deferred = q.defer();
deferred.resolve("Good");
const callBack = function(data) {
expect(spy.called).to.be.true;
done();
}
let spy = sinon.spy(callBack);
systemUnderTest(deferred.promise,spy);
})
现在我认为应该更好的是测试回调数据的结果,而不是间谍。这样您还可以确保调用该函数。请观察完成参数
像这样:
it('some test',function(done){
const deferred = q.defer();
deferred.resolve("Good");
const callBack = function(data) {
expect(data).to.exist; //or any other assertion.
done();
}
systemUnderTest(deferred.promise,callBack);
})
希望得到这个帮助。