在崩溃恢复过程中分析 nodejs 应用程序的代码覆盖率

Analyse code coverage of a nodejs app during a crash recover story

实际上,我正在努力使我的 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 test -> 使用 test env

启动我的应用

此致

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

显然伊斯坦布尔团队已经考虑过了 -> Look at the last answer of this github ticket

此解决方案为我提供了一种生成多个 coverage 文件然后生成单个 report.

的方法