Testing javascript with Mocha - how can I use console.log to debug a test?
Javascriptnode.jsmocha.jsJavascript Problem Overview
I am using the javascript test-runner "Mocha".
I have a test that is failing, so I would to debug it using console.log
.
But when the tests are run, there is no output (only the test results from Mocha).
It seems like Mocha has captured and suppressed my console.log
output!
How can I get Mocha to show my output? (at for tests that fail)?
EDIT:
Huge apologies! — console.log
does work during tests! I must have been expecting it to suppress the output, and I didn't properly check my own code. Thanks for responding.
So... that being said... maybe it actually would be nice to suppress the output for tests that pass? hmm...
On a related note: I want to use console.log
because I am having a lot of trouble trying to get the Eclipse debugger to connect to node.js.
Am I the only one who finds this tricky? How do you guys debug node.js? With a debugger, or with console.log
statements?
Javascript Solutions
Solution 1 - Javascript
What Mocha options are you using?
Maybe it is something to do with reporter (-R) or ui (-ui) being used?
console.log(msg);
works fine during my test runs, though sometimes mixed in a little goofy. Presumably due to the async nature of the test run.
Here are the options (mocha.opts) I'm using:
--require should
-R spec
--ui bdd
Hmm..just tested without any mocha.opts and console.log
still works.
Solution 2 - Javascript
If you are testing asynchronous code, you need to make sure to place done()
in the callback of that asynchronous code. I had that issue when testing http requests to a REST API.
Solution 3 - Javascript
You may have also put your console.log
after an expectation that fails and is uncaught, so your log line never gets executed.
Solution 4 - Javascript
I had an issue with node.exe
programs like test output with mocha
.
In my case, I solved it by removing some default "node.exe" alias.
I'm using Git Bash for Windows(2.29.2) and some default aliases are set from /etc/profile.d/aliases.sh
,
# show me alias related to 'node'
$ alias|grep node
alias node='winpty node.exe'`
To remove the alias, update aliases.sh
or simply do
unalias node
I don't know why winpty
has this side effect on console.info
buffered output but with a direct node.exe
use, I've no more stdout issue.
Solution 5 - Javascript
Use the debug lib.
import debug from 'debug'
const log = debug('server');
Use it:
log('holi')
then run:
DEBUG=server npm test
And that's it!