jcollum
jcollum

Reputation: 46569

what's the least resistance path to debugging mocha tests?

Edit Nov 2016: Node now has a built in debugger that you can start with --inspect. This answer explains it: https://stackoverflow.com/a/39901169/30946.

I'm building a mocha test in coffeescript. Right at the top of the test I have:

require "../assets/js/theObject.coffee"
debugger
ss = new TheObject()

I'd like to stop on that debugger line because the object in theObject.coffee isn't being loaded. I'm using node-inspector and it works, sorta.

The process that I have is:

  1. start node-inspector
  2. run the test at the command line with mocha --compilers coffee:coffee-script ./test/theObjectTests.coffee --ui bdd -d --debug-brk
  3. go to the node-inspector page, refresh it if it is already open
  4. wait for the file theObject.coffee to be loaded, then put a breakpoint on the correct line

There must be an easier way. It seems like I should be able to have a debugger running and just have it stop on that debugger line, but I'm not able to find that.

I have WebStorm, which has a debugger (this article discusses setting it up to run mocha tests, but it didn't help me), but when I start it, it fails. The command that's running in the WebStorm debug window is:

"C:\Program Files\nodejs\node.exe" --debug-brk=64232 C:\Users\jcollum\AppData\Roaming\npm\_mocha

C:\Users\jcollum\AppData\Roaming\npm\_mocha:2
basedir=`dirname "$0"`

I suspect that might be a windows specific issue.

Env: Windows 7, Webstorm, node 0.8.16, mocha 1.7.4, git-bash

The question: if you're starting from scratch with Mocha, what's the easiest way to get a debugger going that will stop on a debugger line easily? Easy is the keyword here.

Edit: since asking this I've stopped using Windows and am working in Ubuntu. My mocha debugging process (which I use infrequently) is the same.

Upvotes: 48

Views: 25747

Answers (11)

tjb
tjb

Reputation: 11728

In addition to the other answers you can also

  1. add the debugger keyword where you want to stop in your program
  2. Run mocha like: npx ts-mocha inspect my.test.ts
  3. At the command line debugger that starts type 'c' and 'enter'
  4. You will be at your breakpoint (type 'l' and 'enter' to confirm this)

Note: the critical part of this answer is the inspect , other aspects might need to be changed for i.e. javascript, running without npx, etc. I just wrote the version I have tested (node v16.15.0, mocha ts-mocha 10.2.0)

Upvotes: 0

k0pernikus
k0pernikus

Reputation: 66430

In regards to either Webstorm or PhpStorm, you can add a specific mocha debug configuration:

Debug configuration

You'll have to add via the green, you might give it a name.

If the already installed mocha in the project via:

 npm install mocha --save

or

 yarn add mocha

it will find the according module in your project.

I had to provide the correct path to my unit tests, and hit the mark for Include subdirectories/

Since my project is a typescript one I had to add:

yarn add ts-node

For a pure js project it should not be necessary.

Now you can run the entire test suit, and you can then pick single test cases from the list and run them on and debug them on their own.

Upvotes: 1

jcollum
jcollum

Reputation: 46569

Edit, years later: the shortest path in Node 6+ is: mocha --debug-brk --inspect ./test.js coupled with the Node Inspector Manager plugin.

Many weeks later, no answers. Here's the quickest path that I found.

  1. write mocha tests
  2. install node-inspector
  3. start node-inspector -- it will now be listening on 5858
  4. start the mocha test with --debug-brk
  5. at this point the mocha test is paused on the first line
  6. open a web browser and go to localhost:5858
  7. (optional: add a debugger line at the top of your test file, set breakpoints after it stops in that file)
  8. hit F10 to get the code to go
  9. node-inspector will stop on any line that has debugger on it. Occasionally it won't move the code file's window to the right place, so you'll have to hit F10 to get it to step to the next line and show where it's at in the file.

Command line:

node-inspector & mocha --compilers coffee:coffee-script/register ./test/appTests.coffee --ui bdd -d -g "should X then Y" --debug-brk

Upvotes: 64

stropitek
stropitek

Reputation: 1344

A modern way to do this is to use nodejs's inspector integration feature. It's fairly simple to use. I've already written a detailed explanation of how to use it in this post

Upvotes: 0

Cory House
Cory House

Reputation: 15045

None of the existing answers mention the path of least resistance: When you need to debug Mocha tests, you can simply add another assert that checks the value you'd like to debug.

myVar.should.equal(expected);

I find this is often all I need. And I just remove the extra assert(s) I used for debugging when I'm done.

Upvotes: 0

Filip Dupanović
Filip Dupanović

Reputation: 33640

If it's a Node application, then using the integrated Node debugger from the command line is the quickest path to stardom:

$ mocha $args -- debug

Upvotes: 3

Stephan Ahlf
Stephan Ahlf

Reputation: 3497

Heads up on http://s-a.github.io/iron-node/. This is most efficient software to debug anything Node.js related.

$ iron-node ./node_modules/mocha/bin/_mocha

enter image description here

enter image description here

Upvotes: 6

timhc22
timhc22

Reputation: 7451

In Webstorm now you can just set up using a mocha configuration. Worked pretty much out of the box for me:

Node interpreter: /usr/local/bin/node
Working directory: /Users/me/sites/mysite
Mocha Package: /Users/me/sites/mysite/node_modules/mocha

and then

All in directory
Test directory: /Users/me/sites/mysite/test

It also shows you the parameters it runs with so you can probably copy them to another environment if you need to.

Upvotes: 1

doingweb
doingweb

Reputation: 3708

With the latest versions of Mocha and node-inspector, this has been working great for me:

$ node-debug ./node_modules/mocha/bin/_mocha

It loads up the local Mocha executable as the debugged process, stopping on the first line for you to set up your breakpoints.

Upvotes: 8

Simon Lang
Simon Lang

Reputation: 42635

In addition to @jcollum's answer above, I have found instead of using the --debug-brk flag, it is better to just use the --debug flag with -w (watch)

That way, when you add and remove debugger lines from your code, mocha will reload the tests automatically and your node-inspector will pause on the appropriate line.

This saves having to revisit the terminal constantly restarting the tests, then needlessly hitting "continue" in the debugger to get past the first line of the source.

Upvotes: 11

Brock
Brock

Reputation: 1645

The alternative way using WebStorm node debugger.

In short:

  1. You need WebStorm
  2. Create new Node debug profile in WebStorm
  3. Set path to your mocha binary into Path to Node App JS File
  4. Add breakpoints and start the session from WebStorm

Detailed instruction with screenshots by Glenn Block.

Upvotes: 5

Related Questions