3

我正在使用 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

4

0 回答 0