有没有一种方法可以说明为什么测试功能可以通过?
当我跟随Jest test Async Code section
它说:
请务必返回承诺-如果省略此return语句, 您的测试将在fetchData完成之前完成。
我的代码是:
function add1(n) {
return new Promise((res, rej)=>{
res(n+1)
})
}
test('should add 1', function() {
expect.assertions(1)
//////////////////////////// I did not use RETURN here
add1(10).then((n11)=>{
expect(n11).toBe(11)
})
});
这还是过去了,我想知道这怎么可以过去?
答案 0 :(得分:1)
Promise
立即并同步解析,因此then
立即被调用,并且expect
在测试完成之前已经运行。 (如果then
已解决,则Promise
回调将立即运行)
如果您使用setTimeout
来阻止Promise
立即和同步地解析,那么除非返回Promise
,否则测试将失败:
function add1(n) {
return new Promise((res, rej) => {
setTimeout(() => { res(n + 1) }, 0); // use setTimeout
})
}
test('should add 1', function () {
expect.assertions(1)
// PASSES only if Promise is returned
return add1(10).then((n11) => {
expect(n11).toBe(11);
})
});