Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No console.log to STDOUT when running "npm test" (jest)

From what I know console.log() should work without problem printing to the STDOUT of my console, when running a script.

But in my case I have NPM configured to run Jest when issuing npm test from the shell, and any console.log() inside the test files doesn't print anything on the screen. I tried also to use process.stdout.write() but still I get no custom output when running npm test.

How am I supposed to debug stuff in my test scripts? I can't figure out if it is a problem from Node, from NPM, or from Jest. There's a Jest issue that looks similar to mine but still I cannot solve and get to output a simple string; while there rest of Jest output is echoed as usual.

Anybody experienced a similar problem?

EDIT 1: I tried running npm test -- --runInBand but the log doesn't appear.

Note

trying to run the command repeatedly like

console.log('foo...');console.log('bar..');console.log('baz..');

I can sometimes see the log, but this is then overwritten/hidden by the rest of the following Jest output.

like image 243
Kamafeather Avatar asked Jan 14 '19 23:01

Kamafeather


People also ask

Does console log work in jest?

Jest by default prints all console. log (warnings, errors, etc) messages to the console. That's great - it helps you understand what's going on in your code when tests run.

How do I hide console log in jest?

To disable console inside unit tests with Jest, we can use the --silent option or set the console methods to mocked functions. to run jest with the --silient to disable console output when running tests.

How do I run a node jest test?

In order to run a specific test, you'll need to use the jest command. npm test will not work. To access jest directly on the command line, install it via npm i -g jest-cli or yarn global add jest-cli . Then simply run your specific test with jest bar.


2 Answers

From the linked issue since the problem is going on since years...

There is a pull request in the alpha release that is going to fix this problem. Looks like the last refining is being worked in the past few hours (see Github issue link).

However I found a solution that works for my simplest case:

  • just run enabling verbose mode and the log will magically appear!
npm test -- --verbose=true 

This will not fix in every case; maybe async/multi-thread/etc will still have problems (please report your experiences, so I can update the answer); fo r example adding a process.exit(1) after the log will hide it again.

Trying to press ctrl + c before the process.exit() runs (with the right timing...) will show that the log is actually there and being overridden.

I will update the answer with news, but probably this will help others in starting with Node/NPM/Jest setups!

like image 188
Kamafeather Avatar answered Oct 06 '22 00:10

Kamafeather


This isn't clean, but I've had luck with it, hopefully it'll help you until a fix is published: log some extra newlines after the log that's getting overwritten:

console.log('I want to be seen!'); console.log('\n\n\n\n'); 
like image 27
helloitsjoe Avatar answered Oct 06 '22 00:10

helloitsjoe