在崩溃恢复故事期间分析nodejs应用程序的代码覆盖率

时间:2016-04-21 16:05:14

标签: node.js automated-tests mocha chai istanbul

我实际上试图为我的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

启动我的应用

祝你好运

1 个答案:

答案 0 :(得分:0)

在对这个问题进行更多研究后,我意识到可能更容易“连接”两个不同执行的结果。

显然伊斯坦布尔队正在考虑这个问题 - > Look at the last answer of this github ticket

此解决方案为我提供了一种方法来生成多个覆盖文件,然后生成一个报告