我正在使用 Jest 和 Supertest 测试我的 Node.js 应用程序。我有多个测试,但其中只有 2 个偶尔会失败,并显示消息"read ECONNRESET "。我没有发现任何固定的失败模式,因为有时它们都失败了,有时另一个失败了,有时它们都通过了。
我的数据库是 MongoDB。
这是 1. 有时会失败的测试:
test('user cannot upload image without token', async (done) => {
await api
.patch(`/api/users/${authenticatedUser.id}/picture/add`)
.attach('image', path.join(__dirname, 'test-image.jpg'))
.expect(401)
.expect('Content-Type', /application\/json/)
const user = await User.findOne({_id: authenticatedUser.id})
expect(user.image).toBeFalsy()
done()
})
这是 2. 有时会失败的测试:
test('user cannot upload image with invalid token', async (done) => {
await api
.patch(`/api/users/${authenticatedUser.id}/picture/add`)
.attach('image', path.join(__dirname, 'test-image.jpg'))
.set('Authorization', `bearer ${helper.invalidToken}`)
.expect(401)
.expect('Content-Type', /application\/json/)
const user = await User.findOne({_id: authenticatedUser.id})
expect(user.image).toBeFalsy()
done()
})
这两个测试的共同点是,它们在单独测试时都会发出以下警告:
● Cannot log after tests are done. Did you forget to wait for something async in your test?
Attempted to log "connected to MongoDB".
17 | mongoose.connect(config.MONGODB_URI, { useNewUrlParser: true, useCreateIndex: true, useFindAndModify: false, useUnifiedTopology: true })
18 | .then(() => {
> 19 | console.log('connected to MongoDB')
| ^
20 | })
21 | .catch((error) => {
22 | console.log('error connection to MongoDB:', error.message)
at BufferedConsole.log (node_modules/@jest/console/build/BufferedConsole.js:199:10)
at mongoose.connect.then (app.js:19:13)
但是,当这些测试偶尔通过时也会发出此警告,并且在单独测试时与其他测试一起发出。也许它与这个 ECONNRESET 有某种关系,或者可能不是......
我真的很感激一些关于如何解决这个小而烦人的问题的提示。提前致谢!
可以找到完整的测试文件和整个项目:这里在 GitHub