В Jest callback done используется для асинхронного тестирования. Он передается в качестве аргумента вашей тестовой функции и должен быть вызван, когда асинхронная операция завершается. Если у вас есть асинхронная операция на основе промисов, верните этот промис вместо использования done.
test('async test', done => {
setTimeout(() => {
expect(someValue).toBe(expectedValue);
done();
}, 2000);
});Пояснение:
- Передача
doneв тестовую функцию:doneпередается в качестве аргумента в тестовую функцию.
- Вызов
doneпосле завершения асинхронной операции:- Внутри асинхронной операции (например, внутри
setTimeout) вызываетсяdone(), чтобы сообщить Jest, что асинхронная операция завершена и тест может быть завершен.
- Внутри асинхронной операции (например, внутри
- Ожидание вызова
done:- Если
doneне вызывается в течение дефолтного таймаута (5 секунд), тест завершится с ошибкой.
- Если
Пример с использованием setTimeout:
test('async test with setTimeout', done => {
setTimeout(() => {
expect(true).toBe(true);
done();
}, 2000);
});Пример с использованием Promise:
Если у вас есть асинхронная операция на основе промисов, верните промис вместо использования done:
test('async test with Promise', () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
expect(true).toBe(true);
resolve();
}, 2000);
});
});Пример с использованием async/await:
Если вы используете async/await, вам не нужно использовать done:
test('async test with async/await', async () => {
await new Promise(resolve => setTimeout(resolve, 2000));
expect(true).toBe(true);
});