116

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?

franzlorenzon
  • 5,333
  • 6
  • 31
  • 55
Nick Perkins
  • 7,284
  • 6
  • 36
  • 39
  • Good deal! :) Right now I'm still very much 'debugging' node via moca tests. I do see a time in the near future when I might want to eval some of the options here: http://stackoverflow.com/questions/1911015/how-to-debug-node-js-applications – Zach Bonham May 19 '12 at 16:45
  • I would suggest that you don't use Eclipse for Node.js, it really isn't the best environment to use IMO. JetBrains' WebStorm is a great Node.js IDE, although it costs money. If you're looking for free, I've really been liking the new Visual Studio Code, which has great built-in support for Node debugging and other things that make Node development nice. – dsw88 Aug 06 '15 at 16:36
  • @dsw88 - My experience with WebStorm is that it slowed way down once our file structure started getting large and deep. Reminded me of the old days with Java apps. – kirk.burleson Oct 04 '15 at 23:53
  • 2
    In addition to what @dsw88 wrote: Use VS Code: Insert a "debugger;" statement somewhere in your code. Start your test with the --inspect-brk option and use the VS Code debugging action "NodeJs attach". The debugger start at the first line in the mocha script and you'll have to press Resume once. The next time your "debugger;" statement is reached, you are good to go. – FabianTe Oct 18 '18 at 07:53

5 Answers5

51

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.

Zach Bonham
  • 6,542
  • 34
  • 31
  • 10
    where does log() actually lot TO? – PositiveGuy Jul 16 '15 at 16:02
  • HHHmmm with 9 upvotes, on where it actually logs TO?!? might someone help? I'm using webstorm, and I'm not seeing it in the Process Console or the Debugger Console of the debug window. – redevill Apr 13 '21 at 22:50
34

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.

Kevin C.
  • 2,409
  • 1
  • 27
  • 40
23

You may have also put your console.log after an expectation that fails and is uncaught, so your log line never gets executed.

qix
  • 6,008
  • 1
  • 44
  • 58
  • 2
    Yep, that was my issue, thanks for suggesting this. I moved the console logs to BEFORE the failing .expect, and they show now. – redfox05 Aug 29 '16 at 17:48
0

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.

boly38
  • 1,565
  • 20
  • 28
-1

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!

Sebastián Lara
  • 4,397
  • 2
  • 23
  • 21