如何使用摩卡TDD koa2?

时间:2017-12-07 14:57:51

标签: mocha koa chai-http

我试图使用koa2 / mocha / chai / chai-http进行TDD工作流程,但我的问题是,当我运行测试时,koa2服务器在测试完成后继续运行。所以我每次都要按Ctrl + C(杀)它。

有人能告诉我如何设置TDD工作流程,在所有测试运行后服务器停止运行吗?

另外,我希望在检测到更改后立即查看测试文件以进行更改并重新运行测试...任何人都可以帮忙吗?无法在网上找到任何东西-.-

我目前拥有(简化):

的package.json:

"scripts": {
   "watch-server": "nodemon --watch 'src/**/*' -e ts,tsx --exec 'ts-node' ./src/server.ts",
   "test": "./node_modules/mocha/bin/mocha --compilers ts:ts-node/register test/**/*.ts"
},

server.ts:

app.use(routes_v1.routes());

export const server = app.listen(3000, () => {
    console.log('Server running on port 3000');
});

试验:

process.env.NODE_ENV = 'test';

import * as chai from 'chai';
const chaiHttp = require('chai-http');

const should = chai.should();
chai.use(chaiHttp);

import { server } from '../../../src/server';

describe('routes : login / register', () => {
  describe('POST /sign_in', () => {
    it('should return unauthorized for invalid user', (done) => {
      chai.request(server)
      .post('/sign_in')
      .send({email: "test@test.de", password: "somePassword"})
      .end((err, res) => {
        res.status.should.eql(401);
        should.exist(err);
        done();
      });
    });

    it('should return authorized for valid user', (done) => {
      chai.request(server)
      .post('/sign_in')
      .send({email: 'authorized@test.de', password: "authorizedPassword"})
      .end((err, res) => {
        res.status.should.eql(200);
        should.exist(res.body.token);
        done();
      });
    });
  });

谢谢。

1 个答案:

答案 0 :(得分:2)

从版本4.0开始,一旦所有测试完成,Mocha将不再强制进程退出。测试完成后,您可以使用CLI parameter -exit退出流程:

"test": "mocha ... -exit"

或者使用Hooks或其他选项可让您更好地控制流程。因此,您可以在运行测试之前启动服务器并在以下之后停止它:

describe('...', () => {
  let server;

  before(() => {
    server = app.listen()
  });
  after(() => {
    server.close()
  });

  ...
})

例如,您可以查看this test。它使用的是Jest和supertest,但想法是一样的。