Skip to content

Add support for using 'node --inspect' to debug tests #108

@micellius

Description

@micellius

It would be beneficial to have Node.js debugging capabilities for tests.

Note:
Currently, when starting node-qunit CLI in debug mode using --debug-brk child processes created by testrunner are created with the same debugging port, which causes an error.

Requirements:

  • node-qunit should have a configurable parameter that will trigger child processes to run in debug mode on port provided by this parameter.
  • If node-qunit itself is running in debug mode and no port is provided by parameter, node-qunit should be able to find free port and use it for debugging of child process.
  • Since node-qunit spawns new process for each test file, debugging port should be configurable for each test file.
  • Infinite loop validation should be disabled for child processes running in debug mode

Usage:

  • Using --debug parameter and list of ports in the same order as test files
    $ node node_modules/qunit/bin/cli.js -c code.js -t test1.js test2.js --debug 54890 40893
  • Starting node-qunit in debug mode using --debug-brk
    $ node --debug-brk=56566 node_modules/qunit/bin/cli.js -c code.js -t test1.js test2.js

Activity

kof

kof commented on Nov 4, 2014

@kof
Contributor

Could we fully automate ports selection so that there is no need for defining ports?

micellius

micellius commented on Nov 4, 2014

@micellius
Author

Yes, it's exactly the second case in the usage section, where no ports configuration is provided and they are chosen automatically. Once process is running in debug mode NodeJS prints debug port, so auto generated port will be sufficient to connect to the process using debugger. Port configuration option is mostly enhancement that will allow to have some fixed debugging configuration in IDE (I'm using "Node.js remote debug" option in WebStorm) that should not be updated each time. I'm currently working on PR, but I'm pretty sure that your implementation will be definitely better.

Regarding implementation I think it should be something like the code below (in testrunner.js before forking the process)

function runOne(opts, callback) {
    ...
    var debug = process.execArgv.reduce(function(prevArg, curArg) {
        return prevArg || curArg.indexOf('--debug') === 0;
    }, false);

    if(debug) {
        process.execArgv.push('--debug-brk=' + freePort);
    }
    ...
}

Inspired by this post on StackOverflow.
To find free port freeport or find-free-port may be used.

P.S.
Thanks a lot for your responsiveness and cooperation! I'm really appreciate this.

added a commit that references this issue on Nov 4, 2014
db5006c
linked a pull request that will close this issue on Nov 4, 2014
micellius

micellius commented on Nov 4, 2014

@micellius
Author

After looking on code more deep I realised that cli.js spawns only one child process (spawning multiple child processes is only available via API), thus there is no need in list of ports - only one debugging port is needed. Specifying port is also may be optional since it may be auto generated.

@kof I've submitted PR few minutes ago, please take a look. I'm sure you know how to do it better, but idea remains the same. At least for me it solved the problem with test debugging.

changed the title [-][Feature Request] Add capability to debug tests[/-] [+]Add support for using 'node --inspect' to debug tests[/+] on Mar 10, 2017
rromanchenko

rromanchenko commented on Jan 3, 2018

@rromanchenko

Hi, guys. Just curious, if you are going to complete this enhancement and provide an ability to debug execution of tests by node-qunit?
Thanks.

Krinkle

Krinkle commented on Sep 12, 2020

@Krinkle
Member

I believe you can use Node.js CLI options such as --inspect via the NODE_OPTIONS environment variable. For example:

NODE_OPTIONS='--inspect' qunit test/index.js

That will not cover sub processes, but at least it solves the issue of being able to use the qunit command without needin the full path to the js file with the node command.

Also consider using the official QUnit CLI, which might suite your needs: https://qunitjs.com/cli/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @kof@Krinkle@micellius@rromanchenko

      Issue actions