2016-04-21 17 views
0

我實際上正在嘗試爲我的nodeJS應用程序達到代碼覆蓋率的最高分數,我正在使用Mocha + Chai + Istanbul來確保此代碼覆蓋率。在崩潰恢復故事中分析nodejs應用程序的代碼覆蓋率

我的代碼應用程序的一部分專門用於恢復潛在的服務中斷,因此大多數應用程序對象都是在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

經過對這個問題的更多研究後,我意識到將兩個不同執行的結果「連接」起來可能更容易。

而且很顯然的伊斯坦布爾隊想過 - > Look at the last answer of this github ticket

這個解決方案給了我一個方法來生成多個覆蓋文件,然後生成一個報告