我很遗憾粘贴这样的代码。我在这里完全傻眼了 - 任何人都可以告诉我为什么会挂起来?将以下内容粘贴到test.js
中,然后运行node test.js
(使用vows@0.8.1),它将会挂起。
有人可以告诉我为什么吗?
var vows = require('vows');
var assert = require('assert');
function foo(cb) {
console.log("Calling...");
cb("test");
console.log("Called.");
}
vows.describe('Make Vow hang').addBatch({
'return a value': {
topic: function () {
return "bar";
},
'this is': {
'executed fine': function (topic) {
assert.equal(topic, "bar");
}
}
},
'call a function': {
topic: function () {
foo(this.callback);
},
'this is': {
'never executed': function (err, topic) {
console.log('This wont get logged.');
assert.equal(false, true);
}
}
}
}).run();
输出显示一个成功的测试(最后一个周期),然后它挂起:
Calling...
Called.
·
答案 0 :(得分:0)
它没有挂在我的vows@0.8.1上,但它出现callback not fired
错误。
Vows遵循Node.js异步模式callback(err, arg0, ..., argN)
。这意味着回调函数中传递的第一个参数应该是Error
对象。
如果您通过从回调中移除foo
来修改您的功能"test"
,那么它将会有效。
function foo(cb) {
console.log("Calling...");
cb();
console.log("Called.");
}
修改后Vows的结果:
Calling...
Called.
This wont get logged.
✗·
call a function this is
✗ never executed
» expected true,
got false (==)
✗ Broken » 1 honored ∙ 1 broken (0.011s)