我使用mocha-chai为我的节点js应用程序编写了一些单元测试。 我想通过package.json文件的scripts属性依次启动节点JS服务器和测试套件。
我的节点版本是6.9.4。 这些脚本在我的package.json中如下所示:
"scripts": {
"start": "node ./bin/www",
"test": "start && mocha"
}
使用上面的配置,如果我从我的Visual Studio代码终端触发命令为  npm test' ,那么只有服务器才能通过  npm start'而且没有“摩卡咖啡”正在执行。
如果我更改脚本如下:
{{1}}
在这种情况下,服务器启动后,mocha也在启动,但是当连接ECONNREFUSED 120.1.1.1:8000时出现错误。它还会弹出dos命令提示符以及应用程序所在的区域。即使我此时检查浏览器以查看应用程序是否正在运行,我发现服务器已停止运行。
我也试过使用npm-run-all和npm-run-series软件包。 尝试用分号(;)代替&&但没有得到理想的结果。
对此要求的任何帮助都会非常感激。
感谢。
答案 0 :(得分:1)
我认为在测试中以编程方式启动服务器(我认为这是你正在尝试的)会更好。这可以在测试的before
函数中完成。您可以使用after
方法停止服务器。以下是我的一个测试中的示例:
var server;
var tempMongoDbUrl;
before(function (done) {
reqLogger.transports.console.silent = true; // Silent the logger.
tempMongoDbUrl = process.env.MONGODB_URL;
process.env.MONGODB_URL = tempMongoDbUrl + '_test';
delete require.cache[require.resolve('../../data/db.js')];
delete require.cache[require.resolve('../../../app.js')];
server = require('../../../app.js'); // same as "node app.js"
done();
})
after(function (done) {
reqLogger.transports.console.silent = false; // Enable the logger.
server.close(function () {
process.env.MONGODB_URL = tempMongoDbUrl;
mongoose.connection.close(done);
})
})
server = require('../../../app.js');
启动服务器,server.close()
关闭它。
很多人不会认为这是单元测试,而是集成测试。这是因为它测试了几个单元(路由,服务器,控制器功能等)。但它仍在测试,我认为像客户端那样测试端点是有价值的。在以这种方式运行测试时,我没有任何性能问题。
答案 1 :(得分:0)
定义npm脚本时,您可能会自动运行前脚本和后脚本。
"scripts": {
"premyscript": "echo \"Run 1st\"",
"myscript": "echo \"Run after\"",
"postmyscript": "echo \"Run last\""
}
当您点击“ npm run myscript”>将会全部运行