【问题标题】:Close server and db connect after tests测试后关闭服务器和数据库连接
【发布时间】:2018-03-01 21:07:58
【问题描述】:

我有带有 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}`)
  }
})

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

【问题讨论】:

    标签: javascript node.js jestjs koa supertest


    【解决方案1】:

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

    调用 end() 的替代方法是在玩笑 afterEach()afterAll() 玩笑拆解挂钩中强制关闭数据库连接和服务器:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      相关资源
      最近更新 更多