Jest — некоторые тесты завершаются неудачей при первом запуске, но проходят при втором и третьем запуске

#javascript #node.js #testing #jestjs #supertest

#javascript #node.js #тестирование #jestjs #супертест

Вопрос:

Я пишу тесты с помощью jest и supertest npm на сервере узлов.

когда я запускаю все тесты вместе, некоторые из тестов завершаются неудачно:

неудачные тесты

выбрав в терминале для запуска только неудачные тесты, запустите их, и они пройдут.

прохождение тестов

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

Смотрите использование: нажмите w, чтобы показать больше.(узел: 9484) Предупреждение о необработанном promiserejectionwarning

ошибка: отклонение необработанного обещания

Я использую beforeEach() для удаления базы данных и создания исходной базы данных, которая будет одинаковой для каждого теста.

это setUpDb() :

 const setUpDb = async () => {
    await neo4jContext('MATCH (n) DETACH DELETE n')
    await usersRepository.addUser(user1)
    await usersRepository.addUser(user2)
    await productsRepository.addProduct({ userId: user1.id, product: product1 })
    await productsRepository.addProduct({ userId: user1.id, product: product2 })
    await storesRepository.addStore({
        userId: user1.id, store: store1, products: [product3]
    })
    await storesRepository.addStore({
        userId: user1.id, store: store2, products: [product3]
    })
}
  

//

 beforeEach(setUpDb)
  

использование --runInBand тестов выполняется последовательно, один за другим, поэтому не должно быть путаницы.

это конфигурация в package.json

 "scripts": {
    "start": "node src/index.js",
    "debug": "env-cmd -f ./config/dev.env node inspect src/index.js",
    "dev": "env-cmd -f ./config/dev.env nodemon src/index.js",
    "test": "env-cmd -f ./config/test.env jest --watch --runInBand"
  },
  "jest": {
    "testEnvironment": "node",
    "testTimeout": 50000
  }
  

Я попытался разобраться в этом, но все, что я нашел, это тесты, которые влияют на общее состояние, и поэтому при запуске в одиночку появляется другой результат.
Я не думаю, что это проблема здесь, потому что все вышеперечисленное.

спасибо всем, кто обращается!

Ответ №1:

это произошло потому, что у меня был тест с асинхронной функцией, и я не поставил await перед его выполнением:

 it('should do something', async () => {
const asyncFunc = async () => console.log('async func needs await on exe')

//wrong
asyncFunc()
//right
await asyncFunc()
})