Testing javascript with Mocha - how can I use console.log to debug a test?


Javascript 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)?


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?


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:


then run:

DEBUG=server npm test

And that's it!


All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNick PerkinsView Question on Stackoverflow
Solution 1 - JavascriptZach BonhamView Answer on Stackoverflow
Solution 2 - JavascriptKevin C.View Answer on Stackoverflow
Solution 3 - JavascriptqixView Answer on Stackoverflow
Solution 4 - Javascriptboly38View Answer on Stackoverflow
Solution 5 - JavascriptSebastián LaraView Answer on Stackoverflow