开玩笑-某些测试在第一次运行中失败,但在第二次和第三次运行中通过

问题描述

我在节点服务器中用jest和supertest npm编写测试。

当我同时运行所有测试时,某些测试失败:

failing tests

选择在终端中仅运行失败的测试,然后运行它们并通过。

passing tests

现在,如果我选择在终端中再次运行所有测试,则所有测试均通过,但显示以下错误

观看用法:按w显示更多。(节点:9484)UnhandledPromiseRejectionWarning

error: unhandled promise rejection

我使用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
  }

我尝试调查了一下,但发现的只是影响普通状态的测试,因此单独运行时会出现不同的结果。 我不认为这是问题所在,因为上述所有原因。

向任何伸出手的人致谢!

解决方法

之所以发生,是因为我有一个带有异步功能的测试,我没有在执行之前等待:

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...