0

我正在尝试使用 vows js 来创建单元测试。当“主题”是“未定义”时,我遇到了麻烦。请看下面的例子:

var vows = require('vows'),
  assert = require('assert');

function giveMeUndefined(){
  return undefined;
}

vows.describe('Test vow').addBatch({
  'When the topic is undefined': {
    topic: function() {
      return giveMeUndefined();
    },
    'should return the default value of undefined.': function(topic) {
      assert.isUndefined(topic);
    }
  }
}).export(module);

这不是确切的代码,但它是它的要点。当我运行测试时,我得到“回调未触发”。单步浏览 vows 的代码,我可以看到它在 topic 为undefined.

最终我想知道如何编写单元测试来做到这一点。我团队中的其他人写了我认为是 hack 的东西,并在主题中做了断言并返回trueor falseif topic === undefined

4

2 回答 2

0

来自誓言文档:

» 主题是可以执行异步代码的值或函数。

在您的示例topic中分配给一个函数,因此 vows 期望异步代码。

只需将您的主题重写如下:

var vows = require('vows'),
  assert = require('assert');

function giveMeUndefined(){
  return undefined;
}

vows.describe('Test vow').addBatch({
  'When the topic is undefined': {
    topic: giveMeUndefined(),
    'should return the default value of undefined.': function(topic) {
      assert.isUndefined(topic);
    }
  }
}).export(module);
于 2013-01-08T23:20:57.347 回答
0

您可以提供这样的回调:观察行**Note**

var vows = require('vows'),
  assert = require('assert');

function giveMeUndefined(callback){//**Note**
  callback(undefined); //**Note**
}

vows.describe('Test vow').addBatch({
  'When the topic is undefined': {
    topic: function(){
     giveMeUndefined(this.callback); // **Note**
    },
    'should return the default value of undefined.': function(undefinedVar, ignore) {
      assert.isUndefined(undefinedVar);
    }
  }
}).export(module);
于 2013-11-14T15:48:58.053 回答