简单的VowJS测试回调挂起 - 我看不出原因?

时间:2015-03-24 17:08:46

标签: node.js

我很遗憾粘贴这样的代码。我在这里完全傻眼了 - 任何人都可以告诉我为什么会挂起来?将以下内容粘贴到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.
·

1 个答案:

答案 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)