我有一个函数,在某些情况下会抛出一些对象。我用toThrow编写了一个茉莉花期望匹配器,但是它不起作用。不知道为什么它会失败。任何帮助将不胜感激。
fit("The 'toThrow' matcher is for some object", function() {
function baz(x) { // this is the function to test
if(x === 1) {
return 1;
} else {
throw {status: 515};
}
};
expect(baz(1)).toBe(1); // matched perfect.
expect(baz(2)).toThrow({status: 515}); // failing with message Error: "[object Object] thrown"
});
如何为函数调用baz(2)编写匹配器??
最佳答案
根据文档,必须将对函数的引用赋予expect
,而不是函数的返回值。
见https://jasmine.github.io/api/3.5/matchers.html#toThrow
例
function error() {
throw 'ERROR';
}
expect(error).toThrow('ERROR')
对于您的情况,可以将函数调用包装到另一个函数中。您可以直接在
expect
参数中内联该函数的声明:expect(() => baz(2)).toThrow({status: 515});
// equivalent with
expect(function(){ baz(2) }).toThrow({status: 515});
另一种方法是使用
.bind
将参数附加到函数而不调用它。expect(baz.bind(null, 2)).toThrow({status: 515});
// ^^^^ ^
// context first parameter