Chai 中使用 does.not.throw 进行异常测试

测试是前端开发中不可或缺的环节,而异常测试是其中特别重要的一部分。在测试过程中,我们可以用 Chai.js 来断言某个函数或代码片段是否能够正常地运行或者抛出异常。本文将介绍 Chai.js 中的 does.not.throw 方法,它能够帮助我们更好地进行异常测试。

does.not.throw 基本用法

Chai.js 是一个流行的 JavaScript 断言库,它支持 TDD 和 BDD 风格的测试。在 TDD 风格中,我们使用 assert 方法来做断言;在 BDD 风格中,我们使用 expect 或者 should 方法来做断言。在本文中,我们将使用 expect 方法来做断言。

does.not.throw 方法可以用来测试是否抛出了异常。我们可以用以下语法来断言一个函数不会抛出异常:

其中,function () { /* some code */ } 表示需要被测试的函数,它可以是一个普通函数、箭头函数、匿名函数等等。如果测试过程中没有抛出任何异常,则测试通过。

如果需要测试代码是否会抛出某种异常,可以传入一个异常类型作为参数。例如,我们可以使用以下语法来测试代码是否会抛出 TypeError 异常:

这里的 TypeError 是一个内置的异常类型。我们还可以自定义异常类型,方法是创建一个继承自 Error 的子类,例如:

然后就可以在测试中使用这个异常类型了:

does.not.throw 的深度应用

使用 does.not.throw 方法进行简单的异常测试非常容易,但是在实际开发中,测试的场景经常非常复杂。本节将介绍一些使用 does.not.throw 方法进行深度应用的例子。

验证错误信息

有时候我们需要验证抛出的异常信息是否正确。例如,我们可以使用以下代码片段来测试函数 parseJSON 是否能够正确处理错误的 JSON 格式:

其中,/^Failed to parse JSON:/ 是一个正则表达式,表示异常信息应该以 Failed to parse JSON: 开头。

验证异常对象

如果我们需要在测试代码中对异常对象进行进一步的操作,可以使用 does.not.throw 方法的链式调用。例如,以下代码片段测试了函数 parseXML 是否能够正确处理错误的 XML 格式:

其中,.with.property 方法用来访问异常对象的属性。这里我们访问了异常的 message 属性,并做了进一步的测试。

验证异常的上下文

有时候异常的上下文信息非常重要,它能够帮助我们更好地理解、调试代码。例如,以下代码片段测试了函数 fetchResource 是否能够正确处理 HTTP 异常情况:

其中,.with.property('message').that.includes 方法用来访问异常消息,并检查是否包含了关键字 HTTP error。这里我们还使用了 async/await 语法来编写异步测试代码。

总结

本文介绍了在 Chai.js 中使用 does.not.throw 方法进行异常测试的基础用法和深度应用。通过灵活使用断言库,我们可以更快速、准确地编写测试代码,从而提高开发效率和代码质量。

示例代码:https://codepen.io/zqqiang/pen/vYZOJjK

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654e888a7d4982a6eb7aec21


纠错
反馈