Я начал писать тесты с приложением Jest of (nano) express. Тест запускает сервер с beforeAll()
и закрывает его с afterAll()
. Я вижу, что код выполняется, но процесс JEST не заканчивается.
test. js
test('end to end test', async () => {
const polls = await axios.get(`http://localhost:3000/bff/polls/last`);
console.log(polls.data);
expect(polls.data).toBeDefined();
});
beforeAll(() => {
app.listen(3000, '0.0.0.0')
.then(r => logger.info("Server started"));
});
afterAll(() => {
if (app.close())
logger.info("Server stopped");
});
Вывод из npm run test
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 5.625s
Ran all test suites.
Jest did not exit one second after the test run has completed.
This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
Когда я запускаю с jest --config jest.config.js --detectOpenHandles
, тест также не завершается sh, но ошибки нет, и мне все равно нужно его убить.
Полный исходный код есть: https://github.com/literakl/mezinamiridici/blob/master/infrastructure/test/api.int.test.js
Я тестировал отдельно вне тестов, что nano express завершит процесс вызовом app.close()
. Так что это связано с JEST.
Обновление: то же поведение с обещаниями
test('end to end test', () => {
const polls = axios.get(`http://localhost:3000/bff/polls/last`);
return expect(polls).resolves.toBeDefined();
});
Обновление:
Здесь вы можете найти минимальное воспроизводимое хранилище: https://github.com/literakl/nano-options.git
Я перешел с Ax ios на Got JS, и проблема все еще есть. Когда я сейчас запускаю тест с помощью npm run test
из командной строки, он завершается с:
Timeout - Async callback was not invoked within the 20000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 20000ms timeout specified by jest.setTimeout.Error
Когда я запускаю тест из WebStorm, ошибки не возникает, но процесс продолжает выполняться.