Testing Asynchronous Code
This page was AI-translated by PageTurner (beta). Not officially endorsed by the project. Found an error? Report issue →
Det er vanlig i JavaScript at kode kjører asynkront. Når du har asynkron kode, må Jest vite når koden den tester er ferdig utført før den kan gå videre til neste test. Jest har flere måter å håndtere dette på.
Promises
Returner et promise fra testen din, så venter Jest til dette promiset er løst. Hvis promiset avvises, vil testen feile.
La oss si at fetchData returnerer et promise som skal løses til strengen 'peanut butter'. Vi kan teste det med:
test('the data is peanut butter', () => {
return fetchData().then(data => {
expect(data).toBe('peanut butter');
});
});
Async/Await
Du kan også bruke async og await i testene dine. For å skrive en asynkron test, bruk async-nøkkelordet foran funksjonen du sender til test. For eksempel kan det samme fetchData-scenariet testes med:
test('the data is peanut butter', async () => {
const data = await fetchData();
expect(data).toBe('peanut butter');
});
test('the fetch fails with an error', async () => {
expect.assertions(1);
try {
await fetchData();
} catch (error) {
expect(error).toMatch('error');
}
});
Du kan kombinere async og await med .resolves eller .rejects.
test('the data is peanut butter', async () => {
await expect(fetchData()).resolves.toBe('peanut butter');
});
test('the fetch fails with an error', async () => {
await expect(fetchData()).rejects.toMatch('error');
});
I disse tilfellene er async og await essensielt syntaktisk sukker for samme logikk som promise-eksemplet bruker.
Husk å returnere (eller awaite) promiset - hvis du utelater return/await, vil testen fullføres før promiset fra fetchData er løst eller avvist.
Hvis du forventer at et promise skal avvises, bruk .catch-metoden. Pass på å inkludere expect.assertions for å verifisere at et visst antall assertions blir kalt. Ellers vil et oppfylt promise ikke føre til feil i testen.
test('the fetch fails with an error', () => {
expect.assertions(1);
return fetchData().catch(error => expect(error).toMatch('error'));
});