web-dev-qa-db-fra.com

quel est le moindre chemin de résistance pour le débogage des tests moka?

Éditer novembre 2016: le nœud a maintenant un débogueur intégré que vous pouvez démarrer avec --inspect. Cette réponse l'explique: https://stackoverflow.com/a/39901169/30946

Je construis un test de moka dans coffeescript. Tout en haut du test, j'ai: 

require "../assets/js/theObject.coffee"
debugger
ss = new TheObject()

J'aimerais m'arrêter sur cette ligne du débogueur car l'objet dans theObject.coffee n'est pas en cours de chargement. J'utilise nœud-inspecteur et cela fonctionne, en quelque sorte. 

Le processus que j'ai est: 

  1. lancez l'inspecteur de noeud
  2. lancer le test en ligne de commande avec mocha --compilers coffee:coffee-script ./test/theObjectTests.coffee --ui bdd -d --debug-brk
  3. accédez à la page Inspecteur de nœuds, actualisez-la si elle est déjà ouverte. 
  4. attendez que le fichier theObject.coffee soit chargé, puis placez un point d'arrêt sur la bonne ligne 

Il doit y avoir un moyen plus facile. Il semble que je devrais pouvoir avoir un débogueur en cours d'exécution et le faire arrêter juste sur cette ligne de débogueur, mais je ne parviens pas à le trouver. 

J'ai WebStorm, qui a un débogueur ( cet article explique le configurant pour exécuter des tests moka, mais cela ne m'a pas aidé), mais lorsque je le lance, il échoue. La commande en cours d'exécution dans la fenêtre de débogage WebStorm est la suivante: 

"C:\Program Files\nodejs\node.exe" --debug-brk=64232 C:\Users\jcollum\AppData\Roaming\npm\_mocha

C:\Users\jcollum\AppData\Roaming\npm\_mocha:2
basedir=`dirname "$0"`

Je soupçonne que cela pourrait être un problème spécifique à Windows. 

Env: Windows 7, Webstorm, noeud 0.8.16, mocha 1.7.4, git-bash

La question: si vous partez de zéro avec Mocha, quel est le moyen le plus simple de lancer un débogueur qui s’arrêtera facilement sur une ligne de débogage? Facile est le mot clé ici. 

Edit: depuis que j'ai demandé cela, j'ai arrêté d'utiliser Windows et je travaille sous Ubuntu. Mon processus de débogage de moka (que j'utilise rarement) est le même. 

39
jcollum

Éditer, des années plus tard : le plus court chemin du nœud 6+ est: mocha --debug-brk --inspect ./test.js couplé au plugin Node Inspector Manager. 

Plusieurs semaines plus tard, pas de réponses. Voici le chemin le plus rapide que j'ai trouvé. 

  1. écrire des tests de moka 
  2. installer node-inspector
  3. start node-inspector - il écoutera maintenant le 5858
  4. démarrer le test moka avec --debug-brk
  5. à ce stade, le test moka est mis en pause sur la première ligne
  6. ouvrez un navigateur Web et accédez à localhost: 5858. 
  7. (facultatif: ajoutez une ligne de débogage en haut de votre fichier de test, définissez des points d'arrêt après son arrêt dans ce fichier) 
  8. appuyez sur F10 pour obtenir le code pour aller
  9. l'inspecteur de nœud s'arrête sur toute ligne comportant debugger. Parfois, il ne déplace pas la fenêtre du fichier de code au bon endroit, vous devez donc appuyer sur F10 pour le faire passer à la ligne suivante et indiquer où il se trouve dans le fichier. 

Ligne de commande: 

node-inspector & mocha --compilers coffee:coffee-script/register ./test/appTests.coffee --ui bdd -d -g "should X then Y" --debug-brk

59
jcollum

En plus de la réponse de @ jcollum ci-dessus, j'ai trouvé au lieu d'utiliser le drapeau --debug-brk, il est préférable d'utiliser simplement le drapeau --debug avec -w (watch)

Ainsi, lorsque vous ajoutez et supprimez des lignes de débogueur de votre code, mocha rechargera automatiquement les tests et votre inspecteur de nœuds mettra en pause sur la ligne appropriée.

Cela évite de devoir revoir le terminal en relançant constamment les tests, puis en tapant inutilement "continuer" dans le débogueur pour aller au-delà de la première ligne de la source.

11
captainclam

Avec les dernières versions de Mocha et node-inspector , cela fonctionne très bien pour moi:

$ node-debug ./node_modules/mocha/bin/_mocha

Il charge l'exécutable Mocha local en tant que processus de débogage, en s'arrêtant sur la première ligne pour vous permettre de configurer vos points d'arrêt.

8
doingweb

Surveillez http://s-a.github.io/iron-node/ . C'est le logiciel le plus efficace pour déboguer tout ce qui concerne Node.js. 

$ iron-node ./node_modules/mocha/bin/_mocha

 enter image description here

 enter image description here

6
Stephan Ahlf

La méthode alternative utilisant le débogueur de noeud WebStorm.

En bref:

  1. Vous avez besoin de WebStorm
  2. Créer un nouveau profil de débogage de noeud dans WebStorm
  3. Définissez le chemin d'accès à votre binaire mocha dans Path to Node App JS File
  4. Ajouter des points d'arrêt et démarrer la session à partir de WebStorm

Instruction détaillée avec des captures d'écran de Glenn Block.

5
Brock

S'il s'agit d'une application Node, utiliser le débogueur de nœud intégré à partir de la ligne de commande constitue le chemin le plus rapide vers la célébrité:

$ mocha $args -- debug
3
Filip Dupanović

Dans Webstorm maintenant, vous pouvez simplement configurer en utilisant une configuration mocha. Travaillé à peu près hors de la boîte pour moi:

Node interpreter: /usr/local/bin/node
Working directory: /Users/me/sites/mysite
Mocha Package: /Users/me/sites/mysite/node_modules/mocha

et alors

All in directory
Test directory: /Users/me/sites/mysite/test

Il vous montre également les paramètres avec lesquels il s'exécute afin que vous puissiez probablement les copier dans un autre environnement si vous en avez besoin.

1
timhc22

En ce qui concerne Webstorm ou PhpStorm, vous pouvez ajouter une configuration de débogage mocha spécifique:

Debug configuration

Vous devrez ajouter via le vert, vous pouvez lui donner un nom.

Si le moka déjà installé dans le projet via:

 npm install mocha --save

ou

 yarn add mocha

il trouvera le module correspondant dans votre projet.

Je devais fournir le chemin correct à mes tests unitaires et cochez Include subdirectories /

Comme mon projet est en TypeScript, je devais ajouter:

yarn add ts-node

Pour un projet pur js, cela ne devrait pas être nécessaire.

Vous pouvez maintenant exécuter la totalité de la combinaison de test, puis choisir un cas de test dans la liste, puis les exécuter et les déboguer eux-mêmes.

1
k0pernikus

Aucune des réponses existantes ne mentionne le chemin de moindre résistance: lorsque vous devez déboguer des tests Mocha, vous pouvez ajoutez simplement une autre assertion vérifiant la valeur à déboguer

myVar.should.equal(expected);

Je trouve que c'est souvent tout ce dont j'ai besoin. Et je supprime simplement les assertions supplémentaires que j'ai utilisées pour le débogage lorsque j'ai terminé.

0
Cory House

Une méthode moderne consiste à utiliser la fonction d'intégration inspecteur de nodejs . C'est assez simple à utiliser. J'ai déjà écrit une explication détaillée sur la façon de l'utiliser dans this post

0
stropitek