【问题标题】:Debugging jasmine-node tests with node-inspector使用 node-inspector 调试 jasmine-node 测试
【发布时间】:2011-09-04 00:15:00
【问题描述】:

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

【问题讨论】:

    标签: debugging node.js jasmine


    【解决方案1】:

    我没有受过教育的猜测是你需要修补 jasmine,我相信它会在运行测试时产生一个新的节点进程或其他东西,并且这些新进程需要启用调试。

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

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

    您的测试就是您的调试器。

    【讨论】:

    • 显然不是真的。见伊恩的回答。
    • 我也相信 node-inspector 不能与 jasmine-node 一起使用,因为 jasmine-node 会产生子进程,而 node-inspector 无法处理。搜索解决方案会提示必须将 process.debug_port 设置为每个子进程的唯一值,但这需要篡改 jasmine-node 源代码,我猜
    【解决方案2】:

    最后我写了一个叫做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 调试。如果你运行调试切换将等到你除了 ctrl-c 之外的任何东西。 Ctrl-c 退出。还可以重新运行,很好。

    w0000t.

    【讨论】:

      【解决方案3】:

      简单来说就是调试jasmine-node:

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

      如果您查看jasmine-node 脚本的源代码,它只是调用cli.js,我发现我可以很好地调试该脚本。

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

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

      【讨论】:

      • 实际上,这似乎工作正常。加载调试器后只需按“恢复脚本执行”按钮。这会将您带到第一个断点。我不知道为什么我的第一个测试反而退出了。
      • 重要的是不要指定 --autotest 命令行选项,因为它使 jasmine-node 生成默认情况下不可调试的子进程,没有这个选项,它工作得很好
      • 如果它可以帮助其他人 - 我认为使用更新的节点检查器:node-debug /usr/local/lib/node_modules/jasmine-node/lib/jasmine-node/cli.js spec/
      • 截至我发表评论之日,这在node --inspect --debug-brk -i ./node_modules/jasmine-node/lib/jasmine-node/cli.js test-jasmine/ 有效,因为@xorcus 提到你不能使用--autotest。
      猜你喜欢
      • 2013-07-15
      • 2014-06-13
      • 2013-05-15
      • 2012-09-30
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      相关资源
      最近更新 更多