引发异常的测试函数

引发异常的测试函数

问题描述:

我正在使用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() 
}) 

我似乎不能调用t.throws的自变量中的功能,因为它引发的错误,真不错。我相信这是正确的用法。

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

或't.throws(myFunction.bind(空,{}), '应该抛出异常')' – mynameistechno 2015-10-17 06:06:40

而是结合的如上面的评论所说,ü可以用箭头功能是这样的:

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