Node.js 如何在单个npm测试命令中运行mocha测试和节点?(CI)
我想用它来集成git项目 我正在用摩卡咖啡进行测试 我想做什么? 运行Node.js 如何在单个npm测试命令中运行mocha测试和节点?(CI),node.js,express,mocha.js,circleci,Node.js,Express,Mocha.js,Circleci,我想用它来集成git项目 我正在用摩卡咖啡进行测试 我想做什么? 运行npm测试时我想要: 我的节点服务器将启动 我要运行的测试文件 如何运行一个npm测试命令来运行node和mocha测试,这两个测试都已打包在一个index.js文件中 我在我的包.json中尝试过这一点: "scripts": { "test": "node server/app.js & mocha server/tests/index.js", "start": "node server/
npm测试时
我想要:
- 我的节点服务器将启动
- 我要运行的测试文件
npm测试
命令来运行node和mocha测试,这两个测试都已打包在一个index.js
文件中
我在我的包.json中尝试过这一点:
"scripts": {
"test": "node server/app.js & mocha server/tests/index.js",
"start": "node server/app.js",
"postinstall": "bower install"
}
上述问题
- 我的服务器启动需要一些时间,测试失败,因为它们在服务器启动之前运行
是否有一种标准的方法可以用一个命令运行服务器和测试,但我缺少了一些东西?当运行需要某些先决条件的测试时,我要做的是使用mochas beforeach()功能
从文件中
您还可以选择任何文件并添加“根”级挂钩。例如,将beforeach()添加到所有descripe()块之外。这将导致回调beforeach()在任何测试用例之前运行,而不管它所在的文件是什么(这是因为Mocha有一个隐含的descripe()块,称为“根套件”)
在每个代码块之前,可以运行命令启动服务器
例如,使用npm中的exec库
这将确保您的服务器在测试运行之前运行,从而允许您简单地运行npm测试。如果您的情况可能的话,我建议使用类似的方法进行测试。通过这种方式,您可以避免在启动测试之前必须启动服务器
我知道在某些情况下,无法使用supertest
。在这种情况下,您可以在所有测试之前在before
hook中轮询服务器,以等待它准备就绪:
before(function (done) {
// Set a reasonable timeout for this hook.
this.timeout(5000);
function check() {
if (serverIsReady()) {
done();
return;
}
// The server is no ready, check again in 1/10th of a second.
setTimeout(check, 100);
}
check(); // Start checking.
});
我不确定在您的情况下,serverIsReady
应该是什么。它可能是试图从服务器获取一个简单的路径,比如在路径/
上发出GET
,我认为关键是在测试中运行节点服务器,而不是在另一个进程中尝试初始化它
你的摩卡测试应该从对你的应用程序的一个要求开始,然后每个
您的所有测试都可以与之交互
例如:
var http = require('http');
var server = http.createServer(function(req, res){
res.end('Hello World\n');
})
server.listen(8888);
describe('http', function(){
it('should provide an example', function(done){
http.get({ path: '/', port: 8888 }, function(res){
expect(res).to.have.property('statusCode', 200);
done();
})
})
})
var http = require('http');
var server = http.createServer(function(req, res){
res.end('Hello World\n');
})
server.listen(8888);
describe('http', function(){
it('should provide an example', function(done){
http.get({ path: '/', port: 8888 }, function(res){
expect(res).to.have.property('statusCode', 200);
done();
})
})
})