Node.js 摩卡咖啡测试永远运行
大家好,谢谢大家的关注 我正在尝试用mocha和supertest运行测试,而且,即使一切正常,测试也会永远运行。为了避免这种情况,我在after()方法中添加了一个“process.exit(0)”,这样它就可以正确构建,但这对于“隔离”来说似乎是错误的(此外,它看起来很糟糕:-) My package.json:Node.js 摩卡咖啡测试永远运行,node.js,mocha.js,supertest,Node.js,Mocha.js,Supertest,大家好,谢谢大家的关注 我正在尝试用mocha和supertest运行测试,而且,即使一切正常,测试也会永远运行。为了避免这种情况,我在after()方法中添加了一个“process.exit(0)”,这样它就可以正确构建,但这对于“隔离”来说似乎是错误的(此外,它看起来很糟糕:-) My package.json: { "name": "application-name", "version": "0.0.1", "private": true, "scripts": {
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "nodejs ./bin/www",
"test": "mocha"
},
"dependencies": {
"body-parser": "~1.0.0",
"cookie-parser": "~1.0.1",
"debug": "~0.7.4",
"ejs": "~0.8.5",
"express": "~4.0.0",
"is-my-json-valid": "^2.16.1",
"knex": "^0.13.0",
"morgan": "~1.0.0",
"mysql": "^2.14.1",
"static-favicon": "~1.0.0"
},
"devDependencies": {
"mocha": "^4.0.0",
"supertest": "^3.0.0",
"chai": "^4.1.2",
"util": "^0.10.3"
}
}
我的测试:
var request = require('supertest');
var util = require('util');
describe('Endpoints', function () {
var server;
beforeEach(function() {
server = require('../app').listen(3000);
});
afterEach(function(done) {
server.close(done);
});
after(function(done){
process.exit(0); // <-- THIS LOOKS REALLY BAD
});
it('Success ', function(done) {
var deputy = {name:"Meu Nome", uf:"SP", site_id:"1", secondary_site_id:"2"}
request(server)
.post('/api/deputy')
.send(deputy)
.expect(200, done);
});
it('Bad request ', function(done) {
var deputy = {naonome:"Nao deve funcionar"}
request(server)
.post('/api/deputy')
.send(deputy)
.expect(400, done);
});
});
听起来数据库连接仍在运行。你可以把它关上
connection.end(function(err) {
// The connection is terminated now
});
我假设您可以从/server/db文件获得连接。如果您还没有这样做,请将其导出
我自己不使用mysql,但使用MongoDB时我的after函数是这样的:
after(function (done) {
server.close(function () {
mongoose.connection.close(done)
})
})
如果我不关闭数据库连接,测试将一直运行到最后,但永远不会完成并退出shell。传递到mocha进程
mocha --exit
在版本4.0.0中,Mocha将默认行为从测试完成后退出更改为不退出。从那时起,如果您希望mocha在测试运行后停止,则必须添加--exit
标志
请注意,如果没有退出标志,某些连续集成系统可能永远运行;如果您为CI分钟付费,这可能不可取。显示
app.js
module.done的代码,并在问题中添加您是对的。我使用的不是mongoose而是knex,所以在“之后”位中,是knex.destroy(),而不是mongoose.connection.close()。感谢您的回答!我建议您给出一个简单的解释,说明为什么这样做可以解决问题,以及OP的代码有哪些地方出错。一两句话通常就足够了。
mocha --exit