2013-01-08 41 views
0

我正在嘗試使用誓言js創建單元測試。當「主題」未定義時,我遇到了麻煩。請看下面的例子:未定義的誓言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); 

這不完全是代碼,但它是它的要點。當我運行測試時,我得到「回調未被解僱」。通過誓言的代碼,當主題爲undefined時,我可以看到它的分支。

最終我想知道如何編寫單元測試來做到這一點。我團隊中的其他人寫了我認爲是黑客行爲並做了主題斷言並返回truefalse如果topic === undefined

回答

0

從誓言文檔:

»主題是一個值或能夠執行異步代碼的功能。

在您的示例topic被分配給一個函數,所以誓言期待異步代碼。

只需重寫你的題目如下:

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); 
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);