Chai 中的 .throw 和 .throwError 有什么区别

阅读时长 3 分钟读完

在 JavaScript 的测试框架中,Chai 是一个非常流行的断言库,它提供了多种语法来编写测试用例。其中,.throw.throwError 是两个用来测试函数是否抛出异常的方法。虽然它们看起来很相似,但实际上有一些区别。

.throw

.throw 方法用来测试函数是否抛出异常,语法如下:

其中,function 是要测试的函数,errorConstructor 是一个可选参数,表示期望的异常类型。如果 function 抛出了异常,那么测试用例就会通过。如果 errorConstructor 被指定,那么只有当抛出的异常类型与它相同才会通过。

下面是一个示例:

这个测试用例会通过,因为 foo 函数抛出了一个 Error 异常,并且异常信息是 foo error

.throwError

.throwError 方法也用来测试函数是否抛出异常,但它的语法略有不同:

其中,function 是要测试的函数,expectedError 是一个可选参数,表示期望的异常类型或异常信息。如果 function 抛出了异常,那么测试用例就会通过。如果 expectedError 被指定,那么只有当抛出的异常类型或异常信息与它相同才会通过。

下面是一个示例:

这个测试用例也会通过,因为 bar 函数抛出了一个 TypeError 异常,并且异常信息是 bar error

区别

.throw.throwError 的区别在于参数的类型。.throw 接受一个异常类型作为参数,而 .throwError 接受一个期望的异常类型或异常信息作为参数。因此,.throwError 更加灵活,可以同时测试异常类型和异常信息。

另外,.throw 方法的参数可以是一个构造函数,而 .throwError 方法的参数只能是一个字符串或一个构造函数实例。因此,如果要测试一个自定义的异常类型,应该使用 .throw 方法。

总结

Chai 提供了 .throw.throwError 两个方法来测试函数是否抛出异常。它们的区别在于参数的类型,.throw 接受一个异常类型作为参数,而 .throwError 接受一个期望的异常类型或异常信息作为参数。了解它们的区别可以帮助我们编写更加准确和灵活的测试用例。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65f2e8a52b3ccec22fb7ecec

纠错
反馈