Javascript Chai/Expect-开发时如何工作?从expect().to.throw到记录错误似乎真的很难
我有这个密码Javascript Chai/Expect-开发时如何工作?从expect().to.throw到记录错误似乎真的很难,javascript,unit-testing,mocha.js,chai,Javascript,Unit Testing,Mocha.js,Chai,我有这个密码 expect(function() { //some error }).to.throw(Error); 如何在测试中轻松地从这里记录错误 我真的必须键入try/catch和console.log吗?这是否违背了我最终需要移除它们才能通过测试的事实?柴。toThrow matcher可用于以下方式: 检查特定实例的错误抛出 expect(function() { throw SyntaxError('sample error message'); }).to.throw
expect(function() {
//some error
}).to.throw(Error);
如何在测试中轻松地从这里记录错误
我真的必须键入try/catch和console.log吗?这是否违背了我最终需要移除它们才能通过测试的事实?柴。toThrow matcher可用于以下方式:
检查特定实例的错误抛出
expect(function() {
throw SyntaxError('sample error message');
}).to.throw(SyntaxError);
检查错误消息的文本
expect(function() {
throw SyntaxError('sample error message');
}).to.throw(/sample error message/);
如果这不适合您的用例,您可以始终尝试/捕获并检查/对捕获到的错误的对象进行断言:
try {
throw SyntaxError('sample error message');
} catch(e) {
expect(e.message).to.equal('sample error message');
}
是的,不要解释我自己会投反对票,但既然别人已经解释过,也没有解释过,我就给你我的两分钱。当您编写一个期望抛出错误的测试时,这是因为您正在测试的场景实际上抛出了一个错误。另一方面,如果被测单元捕捉到错误并将某些内容记录到控制台,那么您应该针对该场景进行测试。我们的想法是,命中测试应该检查代码的结果行为,在特定的情况下,这种行为可能是什么。人们在开发测试时不调整代码吗?例如,在上面的错误中,它需要一个特定的错误类型,但没有得到它。只是想记录expect获得的值。如果代码未按预期工作,请确定。你能把你要测试的代码和实际测试一起发布吗?在您正在测试的特定场景中,代码应该做什么?如果它被允许抛出一个错误,那么你需要测试它。如果它应该登录到控制台,那么您需要进行测试。如果你的测试从一开始就写得很好,那么如果你的代码按预期执行,它们就会通过,否则就会失败。。。这不是发展问题,而是发展过程问题。问题是如何从expect获取错误值。如果我说expect.to.throw,我如何引用错误本身呢?很遗憾,如果不添加try/catch,就无法从测试错误到获取错误实例。仅仅因为Chai现在没有匹配器,并不意味着我们无法创建它们。柴是可扩展的。如果我真的知道你的意图,我可以开发一个带有匹配器的Chai插件,为你的用例服务。不幸的是,您的问题太模糊和晦涩了,到目前为止,我仍然不知道您的具体需求/用例是什么。