在 JavaScript 的测试框架中,Chai 是一个非常流行的断言库,它提供了多种语法来编写测试用例。其中,.throw
和 .throwError
是两个用来测试函数是否抛出异常的方法。虽然它们看起来很相似,但实际上有一些区别。
.throw
.throw
方法用来测试函数是否抛出异常,语法如下:
expect(function).to.throw([errorConstructor])
其中,function
是要测试的函数,errorConstructor
是一个可选参数,表示期望的异常类型。如果 function
抛出了异常,那么测试用例就会通过。如果 errorConstructor
被指定,那么只有当抛出的异常类型与它相同才会通过。
下面是一个示例:
function foo() { throw new Error('foo error') } expect(foo).to.throw(Error, 'foo error')
这个测试用例会通过,因为 foo
函数抛出了一个 Error
异常,并且异常信息是 foo error
。
.throwError
.throwError
方法也用来测试函数是否抛出异常,但它的语法略有不同:
expect(function).to.throwError([expectedError])
其中,function
是要测试的函数,expectedError
是一个可选参数,表示期望的异常类型或异常信息。如果 function
抛出了异常,那么测试用例就会通过。如果 expectedError
被指定,那么只有当抛出的异常类型或异常信息与它相同才会通过。
下面是一个示例:
function bar() { throw new TypeError('bar error') } expect(bar).to.throwError('bar error')
这个测试用例也会通过,因为 bar
函数抛出了一个 TypeError
异常,并且异常信息是 bar error
。
区别
.throw
和 .throwError
的区别在于参数的类型。.throw
接受一个异常类型作为参数,而 .throwError
接受一个期望的异常类型或异常信息作为参数。因此,.throwError
更加灵活,可以同时测试异常类型和异常信息。
另外,.throw
方法的参数可以是一个构造函数,而 .throwError
方法的参数只能是一个字符串或一个构造函数实例。因此,如果要测试一个自定义的异常类型,应该使用 .throw
方法。
总结
Chai 提供了 .throw
和 .throwError
两个方法来测试函数是否抛出异常。它们的区别在于参数的类型,.throw
接受一个异常类型作为参数,而 .throwError
接受一个期望的异常类型或异常信息作为参数。了解它们的区别可以帮助我们编写更加准确和灵活的测试用例。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65f2e8a52b3ccec22fb7ecec