我实际上试图为我的nodeJS应用程序达到代码覆盖率的最高分,我使用Mocha + Chai + Istanbul来确保此代码覆盖率。
我的部分代码应用程序专门用于恢复潜在的服务中断,为此,大部分应用程序对象都在Redis中实时序列化。
因此,当应用程序第一次启动时,我将专门从mongoDB加载数据。崩溃恢复后,我也从Redis加载数据。显然我的应用程序没有使用相同的代码部分来执行这两种初始化。
因此,如果我在第一或第二种情况下进行测试,那么伊斯坦布尔的死码报告就不准确且不同。
我正在寻找一种方法来模拟流程中断而不会杀死伊斯坦布尔流程,以便能够获得完整的伊斯坦布尔报告。
我尝试使用child_process来解决它:
var masterLogger = require("./storage/file-logger").master;
const exec = require("child_process").exec;
var redis_flush = exec("redis-cli -n 6 flushall");
var srv1;
var srv2;
redis_flush.on("close", function() {
masterLogger.fatal("Redis clear");
redis_flush = null;
masterLogger.fatal("Starting SRV1");
srv1 = exec("npm test");
srv1.on("close", function() {
masterLogger.fatal("SRV1 killed");
srv1 = null;
masterLogger.fatal("Starting SRV2");
srv2 = exec("npm test");
srv2.on("close", function() {
masterLogger.fatal("SRV2 killed");
srv2 = null;
});
});
});
process.on("SIGINT", function() {
if (redis_flush)
redis_flush.kill();
else if (srv1)
srv1.kill();
else if (srv2)
srv2.kill();
else
process.exit(0);
});
但是伊斯坦布尔只为这部分代码提供了代码覆盖率报告(我达到了100%^^)...
注意: npm测试 - >使用测试 env
启动我的应用祝你好运
答案 0 :(得分:0)
在对这个问题进行更多研究后,我意识到可能更容易“连接”两个不同执行的结果。
显然伊斯坦布尔队正在考虑这个问题 - > Look at the last answer of this github ticket
此解决方案为我提供了一种方法来生成多个覆盖文件,然后生成一个报告。