У меня странная проблема с моими интеграционными тестами Jest. Если я запускаю тесты один за другим, они проходят без проблем. Если я выполню несколько тестов в одном go, они не пройдут с «случайными» сообщениями о проблемах. Случайный, в том числе количество неудачных тестов варьируется за один прогон. Поэтому, если я запускаю один и тот же набор тестов несколько раз, он может сообщить о 31 неудачном тесте на одном go и 17 неудачных тестах на следующем.
Учитывая сообщенное поведение, я подозреваю, что есть некоторое время или проблема кеширования. Похоже, что предыдущий тест не был полностью завершен при следующем запуске, что вызывает проблемы. Я думаю , что я построил свои тесты, чтобы этого не случилось, но, видимо, это не так ...
Вызов Jest, который я использую для запуска тестов, выглядит следующим образом : jest --verbose --detectOpenHandles --testRegex '/test/integration/sc.*\\.test\\.js'
(я тоже пытался добавить --runInBand
, но это не имело значения для возникающих проблем)
Все мои интеграционные тесты Jest имеют одинаковую структуру. Я покажу вам начало двух из них:
const request = require('supertest');
const {Score } = require('../../models/score');
describe('/api/scores', () => {
let server;
beforeEach(async () => {
delete require.cache[require.resolve('../../index')];
server = await require('../../index');
});
afterEach(async () => {
await Score.deleteMany({}).exec();
await server.close();
});
afterAll(async () => {
delete require.cache[require.resolve('../../index')];
server = await require('../../index');
Score.collection.drop();
await server.close();
});
describe('GET /', () => {
...
и
const request = require('supertest');
const { Sessie } = require('../../models/sessie');
const { Check } = require('../../models/check');
const { Opdracht } = require('../../models/opdracht');
const { Score } = require('../../models/score');
const { Speler } = require('../../models/speler');
describe('/api/sessies', () => {
let server;
beforeEach(async () => {
delete require.cache[require.resolve('../../index')];
server = await require('../../index');
});
afterEach(async () => {
await Sessie.deleteMany({}).exec();
await Check.deleteMany({}).exec();
await Opdracht.deleteMany({}).exec();
await Score.deleteMany({}).exec();
await Speler.deleteMany({}).exec();
await server.close();
});
afterAll(async () => {
delete require.cache[require.resolve('../../index')];
server = await require('../../index');
Sessie.collection.drop();
Check.collection.drop();
Opdracht.collection.drop();
Score.collection.drop();
Speler.collection.drop();
await server.close();
});
describe('GET /', () => {
...
Может быть, я иду за борт со всеми удалениями deleteMany и коллекции, но я просто хотел быть действительно уверен, что разные тесты не могут испортить результаты друг друга.
О, и для запуска сервера express используется требование "../../index":
const express = require('express');
const cors = require('cors')
const app = express();
app.use(cors());
[...]
const port = process.env.PORT || 3000;
const server = app.listen(port, () => logger.info(`Listening on host [...] and port ${port}...`));
module.exports = server;
(Я запускаю Express 4.17, Пн goose 5.6.8 и Jest 24.9)
Почему мои тесты проваливаются в серии, а не при отдельном запуске?