测试抛出异常的函数

时间:2015-03-30 22:09:38

标签: javascript node.js unit-testing testing error-handling

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

2 个答案:

答案 0 :(得分:5)

似乎我无法在t.throws的参数内调用该函数,因为它会抛出错误,呃。我相信这是正确的用法。

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

答案 1 :(得分:0)

不是像上面评论中建议的那样绑定,你可以像这样使用箭头函数:

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