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

时间:2017-09-20 17:23:28

标签: javascript node.js jestjs koa supertest

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

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}`)
  }
})

成功完成测试或服务器连接失败后,测试后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)
    })
  })
})

1 个答案:

答案 0 :(得分:0)

您可能已经知道,但Supertest旨在在测试中调用.end()后关闭服务器。作为证据,您可以在超级lib code中看到此功能的声明。

调用end()的另一种方法是在jest afterEach()afterAll() jest teardown hooks中强制关闭数据库连接和服务器:

afterAll(() => {
  mongoose.connection.close();
  server.close();
});