首页  >  文章  >  web前端  >  为什么 Node.js 测试中“expect.to.throw”无法断言抛出的错误?

为什么 Node.js 测试中“expect.to.throw”无法断言抛出的错误?

Patricia Arquette
Patricia Arquette原创
2024-11-15 15:57:03135浏览

Why Does `expect.to.throw` Fail to Assert Thrown Errors in Node.js Tests?

Chai:解决 Node.js 中难以捉摸的 Expect.to.throw

Chai 的 Expect.to.throw 在 Node.js 中可能会令人困惑。 js测试。尽管其预期目的是断言抛出的错误,但当直接应用于代码片段时,它常常会失败。

理解问题:

考虑示例测试用例:

it('should throw an error if you try to get an undefined property', function (done) {
  // Passing the result of model.get('z') directly fails
  expect(model.get('z')).to.throw('Property does not exist in model schema.');
});

尽管实际上抛出了错误,但该测试失败了。一个常见的误解是expect.to.throw处理抛出错误的检索和断言。

解决方案:拥抱函数传递:

解决这个问题的关键问题在于将函数传递给expect.to.throw而不是结果。该函数将由expect执行,触发对抛出错误的检索和验证:

expect(model.get.bind(model, 'z')).to.throw('Property does not exist in model schema.');

在这段修改后的代码中,model.get绑定到模型对象的上下文,并设置了'z'作为其论点。然后,将生成的函数传递给expect.to.throw,确保捕获并断言预期的错误。

通过遵循这种方法,您可以利用 Node 中的expect.to.throw 的全部功能。 js 测试,有效断言抛出错误的发生并确保代码的健壮性。

以上是为什么 Node.js 测试中“expect.to.throw”无法断言抛出的错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn