【问题标题】:How to Debug Grunt Mocha Task?如何调试 Grunt Mocha 任务?
【发布时间】:2014-11-17 19:04:36
【问题描述】:

我正在使用 WebStorm 来运行 grunt 任务。调试器成功停止在 Gruntfile.js 文件中的断点处,但不在我的任务文件中。

在 Gruntfile.js 中,我注册了一个这样的任务:

grunt.initConfig({
  ... configuration ...
});    
grunt.registerTask('myTask', ['mocha:myTask']);

当我在相应的 js 文件中为测试“myTask”设置断点时,它不会停止。 如何调试 grunt 测试?


--- 更新 ------------------------------------ ---

所以我尝试了所有可能的解决方案,但它并没有解决我的问题!

我能够调试 grunt 脚本本身,这是调试器实际停止的地方(在 WebStorm 或节点检查器中)。 Gruntfile.js 中的断点也在工作中。

问题是,我无法调试实际的 Grunt 任务本身,像这样在 grunt 中注册: grunt.registerTask('myTask', ['mocha:myTask']);

我还可以调试 mocha 测试本身。但我想调试从 grunt 任务运行器调用的 mocha 测试。有什么想法吗?

【问题讨论】:

  • 你是如何加载任务的?
  • 也许你可以用它来帮助找到事情停止的地方: grunt.registerTask('debug', function(arg){ grunt.log.writeln(arg); });调用调试任务并传递一个字符串。该字符串将被输出到控制台。
  • @MattBrennan 我已经更新了我的问题...你是这个意思吗?
  • @MBielski 是的,我可以调试它,没问题。但我怎样才能真正调试'loopmocha:myTask'?
  • 您是否尝试过在任务文件中使用debugger; 语句?我发现在 webstorm 中经常会解决这样的问题。

标签: javascript node.js gruntjs webstorm


【解决方案1】:

要在调试中运行 grunt 任务,您需要将 grunt 任务脚本传递给节点检查器:

node-debug $(Path \AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) task

在您的任务中添加debugger; 行。然后node-inspector 将打开带有调试工具的浏览器。

此链接帮助您了解其工作原理grunt-node-inspector

示例:ChrisWren/grunt-node-inspector

来源:Stackoverflow Question

【讨论】:

  • 感谢您的回答。不幸的是,它不起作用。我放置了“调试器”;在 task.js 文件的第一行,但它在节点检查器中甚至不再可见,而且它也没有停止。
【解决方案2】:

我终于可以调试我的 mocha 任务了!感谢您的所有答案和 cmets,但不幸的是,我必须选择自己的答案,因为这是唯一对我有用的答案。

感谢这个视频,我发现了我缺少的东西:http://vimeo.com/97561531

基本上是两件事:

  1. 在 grunt 的 mocha 配置中添加“debug-brk”选项:

    grunt.initConfig({
        ...
            "options": {
                "mocha": {
                    ...
                    "debug-brk": (grunt.option('debug-brk')) ? "" : 0
                }
            }
    }
    
  2. 像这样配置 WebStorm 的调试配置:

【讨论】:

  • 你发现我的视频解决了你的问题真是太棒了。更棒的是,我在调试 web Storm 和更新版本的 mocha 时遇到了问题。在谷歌搜索这个问题时,我遇到了你的答案。您对我之前编写的代码的小修改回答了我的问题……干杯!!!!
【解决方案3】:

如果您碰巧使用 WebStorm IDE,您可以设置一个任务,然后运行或调试它。

您可以在屏幕截图中看到命令grunt jasmine_node_no_coverage 的配置。请注意,我在全局范围内安装了 grunt。

【讨论】:

  • 我是否理解正确,您要调试 grunt-mocha 的代码?如果是,那么您需要在这些源中设置断点。您应该能够找到像grunt.registerTask("mocha", function () { ... }); 这样的行。该函数在你运行 mocha 任务时执行。
  • 我只有一个使用 grunt 和 grunt-jasmine-node-coverage 的项目。当我今天早些时候尝试它时,它在函数内部停止了。我在传递给 registerTask 的函数的第一行的./node_modules/grunt-jasmine-node-coverage/tasks/jasmine-node-task.js 中设置了断点:grunt.registerTask("jasmine_node", "Runs jasmine-node.", function () { /* HERE */ var jasmine = require('jasmine-node'); /* ... */ });
  • 是的,很抱歉它实际上正在停止。当我用一个真正的函数替换 ['mocha:myTask'] 并将调试器放在函数中时,它可以工作,但不能在 mocha myTask.js 文件中......
【解决方案4】:

试试grunt-debug-task

它类似于节点调试器。只需运行grunt debug taskname

我试过了。它有时会中断,但似乎可以工作。

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 2014-10-03
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多