问题描述
我在节点服务器中用jest和supertest npm编写测试。
当我同时运行所有测试时,某些测试失败:
选择在终端中仅运行失败的测试,然后运行它们并通过。
现在,如果我选择在终端中再次运行所有测试,则所有测试均通过,但显示以下错误:
我使用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()
})