我使用 mocha-chai 为我的 Node js 应用程序编写了一些单元测试。
我想通过package.json文件的scripts属性依次启动node JS服务器和测试套件。
我的节点版本是6.9.4。
我的 package.json 中的脚本如下所示:
"scripts": {
"start": "node ./bin/www",
"test": "npm start && mocha"
}
使用上述配置,如果我从 Visual Studio 代码终端将命令触发为 'npm test' ,则只有服务器通过 'npm start' 启动,而不会执行 'mocha' 。
如果我更改脚本如下:
"scripts": {
"start": "node ./bin/www",
"test": "start && mocha"
}
在这种情况下,服务器启动后,摩卡也会启动,但会给出错误,如 connect ECONNREFUSED 120.1.1.1:8000。它还会弹出 dos 命令提示符以及应用程序所在的区域。即使我此时检查浏览器以查看应用程序是否正在运行,我也会发现服务器已停止运行。
我也徒劳地尝试过 npm-run-all 和 npm-run-series 包。
尝试用分号 (;) 代替 && 但没有得到想要的结果。
任何有关此要求的帮助将不胜感激。
Thanks.
我认为最好在测试本身中以编程方式启动服务器(我假设这就是您正在尝试的)。这可以在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()
关闭它。
很多人不会认为这是单元测试,而是集成测试。这是因为它正在测试多个单元(路由、服务器、控制器功能等)。但它仍在测试中,我认为像客户端一样测试端点是有价值的。我以这种方式运行测试时没有遇到任何性能问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)