J'essaie de comprendre le test asynchrone de Jest.Test d'une promesse en utilisant setTimeout avec Jest
Mon module a une fonction qui accepte un booléen et renvoie une promesse de valeur. La fonction d'exécution appelle setTimeout
et, dans le rappel de délai dépassé, la promesse résout ou rejette en fonction du booléen initialement fourni. Le code ressemble à ceci:
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 }
Je voudrais tester cela en utilisant Jest. Je suppose que je dois utiliser les minuteries simulés Jest fournit, donc mon script de test ressemble un peu à ceci:
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')
})
})
})
J'obtiens l'erreur suivante/test a échoué, si j'appelle jest.runAllTimers()
Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
Pouvez-vous expliquer où je me trompe et ce que je pourrais faire pour obtenir un test de passage que la promesse se résout comme prévu?
Cela fonctionne! Merci beaucoup pour l'explication et l'explication et l'exemple de code. –