2015-03-30 112 views
3

我正在使用tape,我試圖測試幾個函數。我的函數拋出錯誤並驗證對象。我喜歡拋出錯誤,因爲後來我的承諾可以抓住他們。我試圖運行簡單的測試,並在所有場景中建立參數data,以打擊堆棧中的每個錯誤。我怎樣才能測試這個功能,而不用每次都把它放在try/catch?我看到有兩個函數的API t.throws()t.doesNotThrow()中,我已經試過兩個,甚至添加了額外參數一樣t.throws(myFunc({}), Error, "no data"),但似乎沒有按預期運行。引發異常的測試函數

var test = require('tape') 
var _ = require('underscore') 

function myFunction(data){ 
    if(!data) throw new Error("no data") 
    if(_.size(data) == 0) throw new Error("data is empty") 
    if(!data.date) throw new Error("no data date") 
    if(!data.messages.length == 0) throw new Error("no messages") 
    data.cake = "is a lie" 
    return data 
} 

test("my function", function(t){ 
    t.throws(myFunction({})) 
    t.end() 
} 

我對磁帶沒有忠誠度,我也不知道自己在做什麼。我只想簡單地測試引發異常的同步函數,而沒有大量的開銷。所以如果這個用例有更好的單元測試框架,我很樂意使用它。如果磁帶有這種能力,我很樂意使用它。

這是它應該怎麼做?

test("my function", function(t){ 
    try{ 
    myFunction({}) 
    t.fail() 
    }catch(e){ 
    t.pass(e.message) 
    } 
    t.end() 
}) 

回答

5

我似乎不能調用t.throws的自變量中的功能,因爲它引發的錯誤,真不錯。我相信這是正確的用法。

t.throws(function(){ 
    myFunction({}) 
}) 
+1

或't.throws(myFunction.bind(空,{}), '應該拋出異常')' – mynameistechno 2015-10-17 06:06:40

0

而是結合的如上面的評論所說,ü可以用箭頭功能是這樣的:

t.throws(() => myFunction({}), 'should throw an exception')