Testen von Javascript mit Mocha - Wie kann ich console.log verwenden, um einen Test zu debuggen?

104

Ich benutze den Javascript-Testläufer "Mocha".

Ich habe einen Test, der fehlschlägt, daher würde ich ihn mit debuggen console.log.

Wenn die Tests ausgeführt werden, erfolgt jedoch keine Ausgabe (nur die Testergebnisse von Mocha). Es scheint, als hätte Mocha meine console.logAusgabe erfasst und unterdrückt !

Wie kann ich Mocha dazu bringen, meine Ausgabe anzuzeigen? (bei für Tests, die fehlschlagen)?

BEARBEITEN:

Riesige Entschuldigung! - console.logfunktioniert während der Tests! Ich muss damit gerechnet haben, dass es die Ausgabe unterdrückt, und ich habe meinen eigenen Code nicht richtig überprüft. Danke für die Antwort. Also ... das heißt ... vielleicht wäre es tatsächlich schön, die Ausgabe für Tests zu unterdrücken, die bestehen? hmm ...

In einem verwandten Hinweis: Ich möchte verwenden, console.logweil ich große Probleme habe, den Eclipse-Debugger dazu zu bringen, eine Verbindung zu node.js herzustellen.

Bin ich der einzige, der das schwierig findet? Wie debuggt ihr node.js? Mit einem Debugger oder mit console.logAnweisungen?

Nick Perkins
quelle
Gutes Geschäft! :) Im Moment "debugge" ich noch sehr viel Knoten über Moca-Tests. Ich sehe in naher Zukunft eine Zeit, in der ich einige der Optionen hier bewerten
Zach Bonham
Ich würde vorschlagen, dass Sie Eclipse nicht für Node.js verwenden, es ist wirklich nicht die beste Umgebung, um IMO zu verwenden. JetBrains 'WebStorm ist eine großartige Node.js-IDE, obwohl sie Geld kostet. Wenn Sie kostenlos suchen, hat mir der neue Visual Studio-Code sehr gut gefallen, der eine hervorragende integrierte Unterstützung für das Node-Debugging und andere Dinge bietet, die die Node-Entwicklung angenehm machen.
dsw88
@ dsw88 - Meine Erfahrung mit WebStorm ist, dass es langsamer wurde, als unsere Dateistruktur groß und tief wurde. Erinnerte mich an die alten Zeiten mit Java-Apps.
Kirk.burleson
2
Zusätzlich zu dem, was @ dsw88 geschrieben hat: VS-Code verwenden: Fügen Sie einen "Debugger" ein; Aussage irgendwo in Ihrem Code. Starten Sie Ihren Test mit der Option --inspect-brk und verwenden Sie die VS-Code-Debugging-Aktion "NodeJs attach". Der Debugger beginnt in der ersten Zeile des Mokka-Skripts und Sie müssen einmal auf Fortsetzen klicken. Das nächste Mal Ihr "Debugger"; Aussage erreicht ist, Sie sind gut zu gehen.
FabianTe

Antworten:

49

Welche Mokka-Optionen verwenden Sie?

Vielleicht hat es etwas damit zu tun, dass Reporter (-R) oder UI (-ui) verwendet werden?

console.log(msg);

funktioniert gut während meiner Testläufe, obwohl manchmal etwas doof gemischt. Vermutlich aufgrund der Asynchronität des Testlaufs.

Hier sind die Optionen (mocha.opts), die ich verwende:

--require should
-R spec
--ui bdd

Hmm..nur ohne Mokka getestet und console.logfunktioniert immer noch.

Zach Bonham
quelle
4
Woher kommt log () eigentlich viel?
PositiveGuy
32

Wenn Sie asynchronen Code testen, müssen Sie sicherstellen, dass er done()in den Rückruf dieses asynchronen Codes eingefügt wird. Ich hatte dieses Problem beim Testen von http-Anforderungen an eine REST-API.

Kevin C.
quelle
20

Möglicherweise haben Sie Ihre console.lognach einer Erwartung gesetzt, die fehlschlägt und nicht erfasst wird, sodass Ihre Protokollzeile nie ausgeführt wird.

qix
quelle
2
Ja, das war mein Problem, danke, dass Sie dies vorgeschlagen haben. Ich habe die Konsolenprotokolle auf VOR dem fehlgeschlagenen .expect verschoben und sie werden jetzt angezeigt.
Redfox05
-1

Verwenden Sie die Debug- Bibliothek.

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

Benutze es:

log('holi')

dann renne:

DEBUG=server npm test

Und das ist es!

Sebastián Lara
quelle