expect().to.be.a(Error) 无法处理抛出错误 _ chai

expect().to.be.a(Error) not working on throw error _ chai

这是我的函数,我正在尝试为其创建测试:

function foo(obj) {
  
    if(typeof obj === 'object' && obj !== null &&Object.prototype.toString.call(obj) == '[object Object]'){
    
  // do something
  
    }else{
        throw new Error(`function test() only accepts [object Object],  you passed: ${Object.prototype.toString.call(obj)}`, )
    }
  };

这是我的测试用例:

it("it should complain with typeof", ()=>{

    try{
        foo(["aaaa"])
    }
    catch (error){

        chai.expect(error).to.be.a(Error)
    }
})

但是我没能通过考试

要检查异常,最好使用:

expect(function () {}).to.throw();

所以在你的代码中:

it("it should complain with typeof", ()=>{
  expect(()=> foo(["aaaa"]) ).to.throw();
})

顺便说一句,明确检查错误:

it("it should complain with typeof", ()=>{
  expect(foo(["aaaa"]).to.be.an('error')
})

Chai docs

正确的语法是:

expect(error).to.be.an('error')

另外'Error'.a('error')也会通过测试。

使用此代码测试(在 docs 中定义):

expect(new Error).to.be.an('error');

您也可以使用 to.throw() 来预期抛出错误。