2016-02-24 1 views
4

La documentation est assez limitée pour faire une couverture avec istanbul pour les tests d'intégration. Quand je passe mes tests de moka, je reçois No coverage information was collected, exit without writing coverage information.Utilisation d'Istanbul pour des tests d'intégration avec un microservice Node

La première chose que je fais est l'instrument tout mon code source:

✗ istanbul instrument . -o .instrument 

Dans mon cas, c'est un Microservice REST qui Dockerized que je l'ai écrit des tests de Mocha pour exécuter contre elle pour valider une fois est déployé. Mon attente est istanbul me donnera une couverture de code contre la source de ce service de noeud.

La deuxième étape que je fais cette commande pour exécuter noeud sur mon code instrumenté:

✗ istanbul cover --report none .instrument/server.js 

Après cela, je cours mes tests en utilisant les éléments suivants à partir du mon répertoire principal src comme suit (avec des résultats):

✗ istanbul cover --report none --dir coverage/unit node_modules/.bin/_mocha -- -R spec ./.instrument/test/** --recursive 


    swagger-tests 
    #createPet 
     ✓ should add a new pet (15226ms) 
    #getPets 
     ✓ should exist and return an Array (2378ms) 
     ✓ should have at least 1 pet in list (2500ms) 
     ✓ should return error if search not name or id 
     ✓ should be sorted by ID (3041ms) 
     ✓ should be sorted by ID even if no parameter (2715ms) 
     ✓ should be only available pets (2647ms) 
    #getPetsSortedByName 
     ✓ should be sorted by name (85822ms) 
    #deletePet 
     ✓ should delete a pet (159ms) 


    9 passing (2m) 

No coverage information was collected, exit without writing coverage information 

Lorsque j'exécute istanbul report, il est évident qu'il n'a rien à signaler.

Qu'est-ce qui me manque?

Voir développer la branche de ce project pour reproduire le problème.

Répondre

1

Le propriétaire d'Istanbul m'aider à résoudre ce problème.J'ai pu obtenir ceci en suivant ces étapes:

  1. Passer l'instrumentation du code; il n'est pas nécessaire
  2. Appel istanbul avec --handle-sigint comme @heckj recommandé et enlever le drapeau --report none
  3. Une fois que votre serveur est, des tests juste fonctionner normalement: ./node_modules/.bin/_mocha -R spec ./test/** --recursive
  4. Arrêtez le serveur de l'étape 2 à la sortie de la couverture
  5. Afficher le fichier HTML au open coverage/lcov-report/index.html
1

Cela ressemble à vous suiviez le poste de blog, je cherchais juste à en essayant de comprendre comment attaquer ce problème de temps:

Je ne sais pas ce précisément ce que est différent entre ce que vous avez posté ci-dessus, et ce que cet article de blog identifie. Une chose à vérifier est de s'assurer que les fichiers * .json de couverture sont générés lors de l'exécution du code. Je ne suis pas sûr quand ces fichiers sont spécifiquement générés par Istanbul, donc vous devrez peut-être terminer le code instrumenté en cours d'exécution. Il y a aussi une mention d'une option --handle-sigint sur la commande de couverture dans le README qui a suggéré d'avoir besoin d'invoquer un SIGINT manuel interrompu pour obtenir des informations de couverture sur un processus de longue durée. En regardant one of the bugs, il y avait manifestement quelque chose de douloureux dans le passé, et certaines versions d'istanbul avaient des problèmes avec le mode "use strict" dans le code NodeJS.

Donc, ma recommandation est d'exécuter tous les tests, puis assurez-vous que tous les processus sont terminés, avant d'exécuter la commande report et de vérifier si les fichiers de couverture * .json sont écrits quelque part. Au-delà de cela, pourrait avoir un sens à prendre cela comme un problème dans le repo github, où il semble y avoir une bonne activité et des réponses.

+0

J'ai correspondu avec l'auteur de cet article, mais nous n'avons pas trouvé de solution, je vais donc suivre votre conseil et signaler un problème. J'ai ajouté mon repo Git dans le post original si vous êtes intéressé à regarder de plus près. – occasl