如何调试Grunt Mocha任务?

9

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

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

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

当我在测试“myTask”对应的js文件中设置断点时,它不会停止。如何调试grunt测试?
--- 更新 --- 所以我尝试了你可能的所有解决方案,但它没有解决我的问题! 我能够调试grunt脚本本身,这是调试器实际上停止的地方(无论是在WebStorm还是node-inspector中)。Gruntfile.js中的断点也起作用。 问题是,我不能调试实际的Grunt任务本身,像这样在grunt中注册: grunt.registerTask('myTask',['mocha:myTask']); 我也能够调试mocha测试本身。但我想调试从grunt任务运行器调用的mocha测试。有什么想法吗?

你是如何加载任务的? - Kara Brightwell
也许你可以使用这个来帮助找到停止的位置: grunt.registerTask('debug', function(arg){ grunt.log.writeln(arg); }); 调用 debug 任务并传递一个字符串。该字符串将被输出到控制台。 - MBielski
@MattBrennan 我已经更新了我的问题... 你是指那个吗? - electronix384128
1
你尝试在任务文件中使用 debugger; 语句了吗?我发现在 WebStorm 中经常可以解决这类问题。 - dc5
在您的任务文件中,将调试器语句放置在您希望调试器中断的位置:debugger; - dc5
显示剩余3条评论
4个回答

6

要在调试模式下运行grunt任务,需要将grunt任务脚本传递给node-inspector:

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

在你的任务中放置一个debugger;代码行。 node-inspector 将会打开一个带有调试工具的浏览器。

这个链接可以帮助你了解它的工作原理:grunt-node-inspector

示例:ChrisWren/grunt-node-inspector

来源:Stackoverflow 问题


谢谢你的回答。不幸的是它并没有起作用。我在task.js文件的第一行放置了“debugger;”,但它甚至在node-inspector中都看不到,也没有停止。 - electronix384128
@BenMarten 你可以看一下这个链接:**使用Node Inspector进行调试** - Prateek

2

终于我能够调试我的mocha任务了!感谢所有的回答和评论,但不幸的是我必须选择自己的答案,因为那是唯一对我有用的。

多亏了这个视频,我找到了我缺少的东西:http://vimeo.com/97561531

基本上有两个问题:

  1. Add a "debug-brk" option to grunt's mocha configuration:

    grunt.initConfig({
        ...
            "options": {
                "mocha": {
                    ...
                    "debug-brk": (grunt.option('debug-brk')) ? "" : 0
                }
            }
    }
    
  2. Configure WebStorm's Debug Configuration like this:

    WebStorm's Debug Config to Halt on debug-brk


6
很棒,你在解决问题时找到了我的视频。更加令人惊喜的是,我在使用Web Storm和更新版本的Mocha进行调试时遇到了问题。在搜索这个问题时,我发现了你的答案。你对我之前编写的代码进行的小修改回答了我的问题......干杯!!! - Matt

1
如果您使用WebStorm IDE,您可以设置一个任务,然后运行或调试它。
您可以在截图中看到命令grunt jasmine_node_no_coverage的配置。请注意,我已经全局安装了grunt。

Configuration of the task in WebStorm


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

0

试用grunt-debug-task

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

我试过了。有时会出现问题,但似乎可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接