Почему этот тестовый пример (Jest) с тривиальным асинхронным обратным вызовом не работает? - PullRequest
1 голос
/ 26 сентября 2019

Context

Я пытаюсь написать контрольный пример, используя Jest (24.9), который имеет функцию асинхронного обратного вызова и завершится успешно при запуске.Тестовый пример, который я написал, выглядит так, как будто он должен работать, но он терпит неудачу, и мне не ясно, почему.

Контрольный пример

Это контрольный пример.Он должен ждать около 100 мс, а затем завершиться успешно.

test("async test case", async () => {
    await (new Promise((resolve) => {
        setTimeout(() => {expect(true).toBe(true)}, 100);
    }));
}, 10000);

Сообщение об ошибке

Когда я запускаю тестовый пример, он выдает следующее сообщение об ошибке:

: Timeout - Async callback was not invoked within the 10000ms timeout specified by jest.setTimeout.
Timeout - Async callback was not invoked within the 10000ms timeout specified by jest.setTimeout.Error: 
    at new Spec (C:\Users\<username>\WebstormProjects\jest-async-test\node_modules\jest-jasmine2\build\jasmine\Spec.js:116:22)
    at new Spec (C:\Users\<username>\WebstormProjects\jest-async-test\node_modules\jest-jasmine2\build\setup_jest_globals.js:80:9)
    at new JBPatchedSpec (C:\Program Files\JetBrains\WebStorm 2019.2.1\plugins\JavaScriptLanguage\helpers\jest-intellij\lib\jest-intellij-jasmine-reporter.js:94:7)
    at specFactory (C:\Users\<username>\WebstormProjects\jest-async-test\node_modules\jest-jasmine2\build\jasmine\Env.js:575:24)
    at Env.it (C:\Users\<username>\WebstormProjects\jest-async-test\node_modules\jest-jasmine2\build\jasmine\Env.js:644:24)    at Env.it (C:\Users\<username>\WebstormProjects\jest-async-test\node_modules\jest-jasmine2\build\jasmineAsyncInstall.js:132:23)
    at it (C:\Users\<username>\WebstormProjects\jest-async-test\node_modules\jest-jasmine2\build\jasmine\jasmineLight.js:93:21)
    at Object.<anonymous> (C:\Users\<username>\WebstormProjects\jest-async-test\async.test.js:2:25)
    ...

Вопросы

Почему этот тест не пройден?

Что может быть примером тривиального тестового примера с асинхронным обратным вызовом, который будет успешным?

В этом тестовом примере есть несколько обратных вызовов.К какому из сообщений относится сообщение об ошибке?

1 Ответ

0 голосов
/ 26 сентября 2019

Это простая ошибка.Как отметил @Emissary, обещание никогда не будет выполнено.Проходная версия теста выглядит следующим образом:

test("async test case", async () => {
    await (new Promise((resolve) => {
        setTimeout(() => {expect(true).toBe(true)}, 100);
        resolve();
    }));
}, 10000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...