如何找出为什么功能通过Jest测试?

时间:2019-01-08 21:38:44

标签: unit-testing jestjs

有没有一种方法可以说明为什么测试功能可以通过?

当我跟随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)
    })
});

这还是过去了,我想知道这怎么可以过去?

1 个答案:

答案 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);
  })
});