使用node-inspector调试jasmine-node测试

时间:2011-05-28 16:33:27

标签: debugging node.js jasmine

有没有人知道这是否可行?节点检查器的大多数示例似乎都适合调试调用的网页。我希望能够调试jasmine-node测试。

3 个答案:

答案 0 :(得分:32)

简而言之,只需调试jasmine-node:

node --debug-brk node_modules/jasmine-node/lib/jasmine-node/cli.js spec/my_spec.js

如果查看jasmine-node脚本的来源,它只会调用cli.js,我发现我可以调试该脚本。

我想使用node-inspector来调试CoffeeScript测试。只需添加--coffee开关就可以很好地工作,例如

node --debug-brk node_modules/jasmine-node/lib/jasmine-node/cli.js --coffee spec/my_spec.coffee

答案 1 :(得分:9)

我最后编写了一个名为toggle的小工具:

require('tty').setRawMode(true);
var stdin = process.openStdin();

exports.toggle = function(fireThis)
{
    if (process.argv.indexOf("debug")!=-1)
    {
        console.log("debug flag found, press any key to start or rerun. Press 'ctrl-c' to cancel out!");
        stdin.on('keypress', function (chunk, key) {
            if (key.name == 'c' && key.ctrl == true)
            {
                process.exit();
            }
            fireThis();
        });
    }
    else
    {
        console.log("Running, press any key to rerun or ctrl-c to exit.");
        fireThis();
        stdin.on('keypress', function (chunk, key) {
            if (key.name == 'c' && key.ctrl == true)
            {
                process.exit();
            }
            fireThis();
        });



    }
}

您可以将其放入单位测试中,例如:

var toggle = require('./toggle');

toggle.toggle(function(){

    var vows = require('vows'),
    assert = require('assert');

    vows.describe('Redis Mass Data Storage').addBatch({

....

然后运行你的测试,如:node --debug myfile.js debug。如果你运行调试切换将等到除ctrl-c之外的任何东西。 Ctrl-c退出。你也可以重新运行,这很不错。

w0000t。

答案 2 :(得分:4)

我没有受过教育的猜测是你需要修补茉莉花,我相信它会在运行测试时产生新的节点进程,而这些新进程需要启用调试。

我有类似的愿望,并设法让表达式使用Eclipse作为调试器: http://groups.google.com/group/nodejs/browse_thread/thread/af35b025eb801f43

...但我意识到:如果我需要单步执行代码来理解它,我可能需要重构代码(可能更易于测试),或者将我的测试分解为更小的单元。

您的测试是您的调试器。