2016-04-21 7 views
0

Ich versuche tatsächlich, die höchste Punktzahl der Codeabdeckung für meine NodeJS App zu erreichen, verwende ich Mocha + Chai + Istanbul, um diese Codeabdeckung zu gewährleisten.Code Coverage einer Nodejs App während einer Absturzwiederherstellung Geschichte

Ein Teil der App meines Codes ist für die Wiederherstellung einer möglichen Dienstunterbrechung reserviert, um dies zu tun, werden die meisten App-Objekte in Echtzeit in Redis serialisiert.

Also wenn die App zum ersten Mal startet, lade ich ausschließlich Daten von mongoDB. Nach einer Wiederherstellung nach einem Absturz lade ich auch Daten von Redis. Offensichtlich verwendet meine App nicht den gleichen Teil des Codes, um diese zwei Arten der Initialisierung durchzuführen.

Aus diesem Grund ist der Istanbul Dead-Code-Bericht nicht korrekt und unterscheidet sich, wenn ich meinen Test im 1. oder 2. Fall durchführe.

Ich bin auf der Suche nach einer Möglichkeit, eine Prozessunterbrechung zu simulieren, ohne Istanbul-Prozess zu töten, um einen vollständigen Istanbul-Bericht zu bekommen.

Ich habe versucht, es zu lösen durch child_process mit:

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); 
}); 

Aber Istanbul ist ein Code-Coverage-Bericht nur für diesen Teil des Codes bereitstellt (wo ich 100% ^^ erreicht) ...

NB: npm Test -> Starten Sie meine App mit einem Test env

mit freundlichen Grüßen

Antwort

0

Nach mehr Forschung zu diesem Thema, erkannte ich, dass es wahrscheinlich einfacher war, das Ergebnis von zwei verschiedenen Ausführungen zu "verketten".

Und anscheinend das Istanbul-Team darüber nachdachte -> Look at the last answer of this github ticket

Diese Lösung mir einen Weg gibt mehrere Abdeckung Dateien zu erzeugen und dann einen einzigen Bericht zu erzeugen.