我有一个函数,在某些情况下会抛出一些对象。我用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

10-05 20:37