首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mocha测试koa2?

如何使用mocha测试koa2?
EN

Stack Overflow用户
提问于 2017-12-07 22:57:51
回答 1查看 1.3K关注 0票数 4

我正在尝试使用koa2/mocha/chai/chai-http进行测试驱动开发工作流,但我的问题是,当我运行测试时,koa2服务器在测试完成后仍然在运行。所以我每次都要Ctrl+C (杀死)它。

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

此外,我希望观察测试文件的更改,并在检测到更改后立即重新运行测试。有人能帮上忙吗?在网上找不到任何东西。

我目前拥有的(简化版):

package.json:

代码语言:javascript
复制
"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:

代码语言:javascript
复制
app.use(routes_v1.routes());

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

测试:

代码语言:javascript
复制
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();
      });
    });
  });

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-12-08 06:35:08

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

代码语言:javascript
复制
"test": "mocha ... -exit"

或者,另一种选择是使用Hooks,它可以让您更好地控制这个过程。因此,您可以在运行test(s)之前启动服务器,并在以下时间后停止服务器:

代码语言:javascript
复制
describe('...', () => {
  let server;

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

  ...
})

作为示例,您可以查看this test。它使用的是Jest和supertest,但想法是相同的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47697841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档