测试后关闭服务器和数据库连接

Kho*_*liy 5 javascript node.js supertest koa jestjs

我有带有 mongo 连接的 koa 服务器,并使用 supertest 来模拟服务器并发送请求,开玩笑作为测试框架。

const app = new Koa()
...
export default app.listen(PORT, (err) => {
  if (err) console.log(err)

  if (!IS_TEST) {
    console.log(`Server running on port: ${PORT}`)
  }
})
Run Code Online (Sandbox Code Playgroud)

成功完成测试或失败服务器连接钢工作后,测试后如何关闭koa服务器连接?

测试示例:

import supertest from 'supertest'
import mongoose from 'mongoose'
import server from '../../../app/server'
import User from '../../../app/models/user'

const r = supertest.agent(server.listen())

afterEach(async (done) => {
  await mongoose.connection.db.dropDatabase()
  done()
})

describe('Authorization', () => {
  describe('POST /signup', () => {
    const userData = {
      email: 'test@test.com',
      password: 111111,
    }

    test('success create user', (done) => {
      r
        .post(`/api/auth/signup`)
        .send(userData)
        .expect(200)
        .expect({
          data: {
            email: userData.email,
          },
        })
        .end(done)
    })

    test('fail of user create, password required', (done) => {
      const userData = {
        email: 'test@test.com',
      }

      r
        .post(`/api/auth/signup`)
        .send(userData)
        .expect(400)
        .expect({
          errors: {
            password: 'Password required',
          },
        })
        .end(done)
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

int*_*oss 4

.end()您可能已经知道,Supertest 的设计目的是在调用测试后关闭服务器。作为证据,您可以在 supertest lib 代码中看到此功能的声明。

afterEach()调用 end() 的另一种方法是在 jest或jest 拆卸钩子中强制关闭数据库连接和服务器afterAll()

afterAll(() => {
  mongoose.connection.close();
  server.close();
});
Run Code Online (Sandbox Code Playgroud)