Jest 中的异步测试
并非所有事物都同步执行,因此并非所有事物都应该同步测试。 Jest 提供了一些异步测试选项。
使用回调
如果您的函数接受一个参数,Jest 将为其提供一个done
回调;测试将运行,直到done
或被done.fail
调用或超时。这对于测试可观察对象非常有用:
// Let's say you're testing a cup that emits an event when it is full or spills.
it('fills without spilling.', (done) => {
const smartCup = new SmartCup();
// The event happened, so call `done`.
smartCup.on('full', () => done());
// If a failing condition happens, you can call `done.fail`.
smartCup.on('spilled', () => done.fail());
smartCup.fill();
});
如果函数接受参数,Jest 将等待done
。例如:
it('works synchronously.', (done) => {
expect(1).toBeGreaterThan(0);
});
...将一直运行直到超时,因为done
从未被调用。
返回承诺
您还可以通过返回承诺来进行异步测试:
it('returns a number.', () => {
return getId()
// After `getId` resolves, you can test it against your expectations.
.then(id => expect(typeof id).toEqual('number'));
});
由于异步函数返回承诺,因此您也可以使用它们:
// Same as above.
it('returns a number.', async () => {
const id = await getId()
expect(typeof id).toEqual('number');
});