我正在尝试理解Jest的异步测试。
我的模块有一个函数,接受一个布尔值并返回一个值的Promise。执行者函数调用setTimeout
,在超时回调中,承诺根据最初提供的布尔值解决或拒绝。代码看起来像这样:
const withPromises = (passes) => new Promise((resolve, reject) => {
const act = () => {
console.log(`in the timout callback, passed ${passes}`)
if(passes) resolve('something')
else reject(new Error('nothing'))
}
console.log('in the promise definition')
setTimeout(act, 50)
})
export default { withPromises }
我想使用Jest进行测试。我猜我需要使用Jest提供的模拟计时器,所以我的测试脚本看起来有些像这样:
import { withPromises } from './request_something'
jest.useFakeTimers()
describe('using a promise and mock timers', () => {
afterAll(() => {
jest.runAllTimers()
})
test('gets a value, if conditions favor', () => {
expect.assertions(1)
return withPromises(true)
.then(resolved => {
expect(resolved).toBe('something')
})
})
})
无论我是否调用
jest.runAllTimers()
,都会出现以下错误/测试失败。Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
您能解释一下我做错了什么,以及我应该怎么做才能通过测试并按预期解决承诺吗?