Tester javascript avec Mocha - comment puis-je utiliser console.log pour déboguer un test?

104

J'utilise le javascript test-runner "Mocha".

J'ai un test qui échoue, donc je voudrais le déboguer en utilisant console.log.

Mais lorsque les tests sont exécutés, il n'y a pas de sortie (uniquement les résultats des tests de Mocha). Il semble que Mocha a capturé et supprimé ma console.logsortie!

Comment puis-je demander à Mocha d'afficher ma sortie? (à pour les tests qui échouent)?

ÉDITER:

D'énormes excuses! - console.logfonctionne pendant les tests! Je devais m'attendre à ce qu'il supprime la sortie, et je n'ai pas correctement vérifié mon propre code. Merci d'avoir répondu. Donc ... cela étant dit ... ce serait peut-être bien de supprimer la sortie des tests qui réussissent? hmm ...

Sur une note connexe: je souhaite utiliser console.logparce que j'ai beaucoup de mal à essayer de connecter le débogueur Eclipse à node.js.

Suis-je le seul à trouver cela délicat? Comment déboguez-vous node.js? Avec un débogueur ou avec des console.logdéclarations?

Nick Perkins
la source
Bonne affaire! :) En ce moment, je suis toujours en train de «déboguer» le nœud via des tests moca. Je vois un moment dans un proche avenir où je pourrais vouloir évaluer certaines des options ici: stackoverflow.com/questions/1911015/…
Zach Bonham
Je suggérerais de ne pas utiliser Eclipse pour Node.js, ce n'est vraiment pas le meilleur environnement pour utiliser IMO. WebStorm de JetBrains est un excellent IDE Node.js, bien que cela coûte de l'argent. Si vous recherchez un logiciel gratuit, j'ai vraiment aimé le nouveau Visual Studio Code, qui offre un excellent support intégré pour le débogage de Node et d'autres choses qui rendent le développement de Node agréable.
dsw88
@ dsw88 - Mon expérience avec WebStorm est que cela a ralenti une fois que notre structure de fichiers a commencé à devenir volumineuse et profonde. M'a rappelé le bon vieux temps avec les applications Java.
kirk.burleson
2
En plus de ce que @ dsw88 a écrit: Utilisez VS Code: Insérez un "débogueur;" déclaration quelque part dans votre code. Démarrez votre test avec l'option --inspect-brk et utilisez l'action de débogage VS Code "NodeJs attach". Le débogueur démarre à la première ligne du script mocha et vous devrez appuyer une fois sur Resume. La prochaine fois que votre "débogueur;" déclaration est atteinte, vous êtes prêt à partir.
FabianTe

Réponses:

49

Quelles options de moka utilisez-vous?

Peut-être que c'est quelque chose à voir avec l'utilisation de reporter (-R) ou ui (-ui)?

console.log(msg);

fonctionne bien pendant mes tests, bien que parfois mélangé à un peu maladroit. Probablement en raison de la nature asynchrone du test.

Voici les options (mocha.opts) que j'utilise:

--require should
-R spec
--ui bdd

Hmm..juste testé sans aucun moka.opts et console.logfonctionne toujours.

Zach Bonham
la source
4
où log () fait-il vraiment beaucoup TO?
PositiveGuy
32

Si vous testez du code asynchrone, vous devez vous assurer de placer done()dans le rappel de ce code asynchrone. J'ai eu ce problème lors du test des requêtes http vers une API REST.

Kevin C.
la source
20

Vous avez peut-être également mis votre console.logaprès une attente qui échoue et n'est pas interceptée, de sorte que votre ligne de journal n'est jamais exécutée.

qix
la source
2
Oui, c'était mon problème, merci de l'avoir suggéré. J'ai déplacé les journaux de la console vers AVANT le .expect défaillant, et ils s'affichent maintenant.
redfox05
-1

Utilisez la bibliothèque de débogage .

import debug from 'debug'
const log = debug('server');

Utilise le:

log('holi')

puis exécutez:

DEBUG=server npm test

Et c'est tout!

Sebastián Lara
la source