Jestの非同期テストを理解しようとしています。JestとsetTimeoutを使って約束をテストする
私のモジュールはブール値を受け取り、値の約束を返す関数を持っています。 executer関数はsetTimeout
を呼び出し、タイムアウトされたコールバックでは、最初に提供されたブール値に応じてpromiseが解決または拒否されます。コードは次のようになります。
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を使ってテストしたいと思います。私は私のテストスクリプトは、ビットのようになりますので、冗談が提供するモックタイマーを使用する必要があることを推測:
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')
})
})
})
私は次のエラーを取得する/テストに失敗し、私は
Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
を呼び出すかどうか
私はどこが間違っているのか、また、約束どおりに解決する合格テストを得るために何ができるのか説明できますか?
これは機能します。説明と説明とコードサンプルに感謝します。 –