В Jest callback done используется для асинхронного тестирования. Он передается в качестве аргумента вашей тестовой функции и должен быть вызван, когда асинхронная операция завершается. Если у вас есть асинхронная операция на основе промисов, верните этот промис вместо использования done.

test("async test", (done) => {
  setTimeout(() => {
    expect(someValue).toBe(expectedValue);
    done();
  }, 2000);
});

Пояснение:

  1. Передача done в тестовую функцию:
    • done передается в качестве аргумента в тестовую функцию.
  2. Вызов done после завершения асинхронной операции:
    • Внутри асинхронной операции (например, внутри setTimeout) вызывается done(), чтобы сообщить Jest, что асинхронная операция завершена и тест может быть завершен.
  3. Ожидание вызова 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);
});

Назад