【发布时间】:2011-09-04 00:15:00
【问题描述】:
有人知道这是否可能吗?节点检查器的大多数示例似乎都适合调试调用的网页。不过,我希望能够调试 jasmine-node 测试。
【问题讨论】:
有人知道这是否可能吗?节点检查器的大多数示例似乎都适合调试调用的网页。不过,我希望能够调试 jasmine-node 测试。
【问题讨论】:
我没有受过教育的猜测是你需要修补 jasmine,我相信它会在运行测试时产生一个新的节点进程或其他东西,并且这些新进程需要启用调试。
我也有类似的愿望,并设法让 expressso 使用 Eclipse 作为调试器工作: http://groups.google.com/group/nodejs/browse_thread/thread/af35b025eb801f43
...但我意识到:如果我需要逐步了解我的代码来理解它,我可能需要重构代码(可能更易于测试),或者将我的测试分解成更小的单元。
您的测试就是您的调试器。
【讨论】:
最后我写了一个叫做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.
【讨论】:
简单来说就是调试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
【讨论】:
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。