我正在尝试使用KOA2/MOCHA/CHAI/CHAI-HTTP进行TDD工作流程完成的。这样我每次都必须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();
});
});
});
谢谢。
从版本4.0 Mocha开始后,一旦所有测试完成,将不再强迫该过程退出。测试完成后,您可以使用CLI参数-exit
从过程中退出:
"test": "mocha ... -exit"
或另一个选项,它可以使您对过程有更多控制权,就是使用钩子。因此,您可以在运行测试之前启动服务器,然后在以下操作之后停止以下操作:
describe('...', () => {
let server;
before(() => {
server = app.listen()
});
after(() => {
server.close()
});
...
})
举例来说,您可以查看此测试。它正在使用开玩笑和超级巨星,但想法是相同的。