В 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);
});