2016-04-21 1 views
0

Je suis en train d'essayer d'atteindre le meilleur score de couverture de code pour mon application nodeJS, j'utilise Mocha + Chai + Istanbul pour assurer cette couverture de code.Analyser la couverture de code d'une application nodejs lors d'un crash récupérer l'histoire

Une partie de l'application de mon code est dédiée à la récupération d'une interruption de service potentielle, pour ce faire, la plupart des objets d'application sont sérialisés en temps réel dans Redis.

Ainsi, lorsque l'application démarre pour la première fois, je charge exclusivement les données de mongoDB. Après une récupération après un crash, je charge également des données de Redis. Évidemment, mon application n'utilise pas la même partie du code pour effectuer ce type d'initialisation. Pour cette raison, le rapport de code mort d'Istanbul n'est pas précis et diffère si je cours mon test dans le 1er ou le 2ème cas. Je cherche un moyen de simuler une interruption de processus sans tuer le processus d'Istanbul pour être capable d'obtenir un rapport complet d'Istamboul.

J'ai essayé de résoudre en utilisant 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); 
}); 

Mais Istanbul fournit un rapport-couverture de code uniquement pour cette partie du code (où je suis arrivé à 100% ^^) ...

NB: NPM Test -> Créer mon application avec un essai env

Meilleures salutations

Répondre

0

Après plus de recherches sur ce problème, j'ai réalisé qu'il était probablement plus facile de "concaténer" le résultat de deux exécutions distinctes.

Et apparemment, l'équipe d'Istanbul PRIVER -> Look at the last answer of this github ticket

Cette solution me donne un moyen de générer de multiples couverture fichiers, puis générer un rapport .