在前端开发中,很多时候我们需要测试可能会抛出异常的代码,以确保应用程序具有健壮性并且处理异常情况的能力。在这种情况下,Chai 是一个在 JavaScript 测试中经常用到的断言库,它提供了多种方式测试抛出异常的代码。本文将介绍如何在 Chai 中使用这些方法测试抛出异常的代码。
expect(...).to.throw(...)
首先,让我们来看一下最简单的测试方式:使用 expect(...).to.throw(...)
方法。这个方法可以用来测试一个函数是否抛出了异常,且异常的类型和消息与预期的一致。该方法的语法如下:
expect(fn).to.throw([error]) expect(fn).to.throw(error) expect(fn).to.throw(errorConstructor) expect(fn).to.throw(regExp) expect(fn).to.throw(errorConstructor, regExp) expect(fn).to.throw(errorConstructor, regExpMessage)
其中,参数 fn
指定了要测试的函数,参数 error
可以是字符串、正则表达式或错误的构造函数,用于描述预期的异常。下面是一个示例代码:
// javascriptcn.com 代码示例 function divide(dividend, divisor) { if (divisor === 0) { throw new Error('Divisor cannot be zero') } return dividend / divisor } describe('divide', () => { it('should throw an error when divisor is zero', () => { expect(() => divide(10, 0)).to.throw('Divisor cannot be zero') }) })
在这个示例代码中,我们定义了一个 divide
函数,用于实现两数相除,当除数为 0 时将抛出一个带有错误消息的异常。在测试代码中,我们使用 expect(...).to.throw(...)
方法测试 divide
函数是否符合预期。通过这个方法,我们可以确保 divide
函数在除数为 0 的情况下会抛出一个带有正确错误消息的异常。
assert.throws(...)
除了使用 expect(...).to.throw(...)
方法,我们还可以使用 assert.throws(...)
方法来测试抛出异常的代码。与 expect(...).to.throw(...)
方法类似,assert.throws(...)
方法也可以检测函数是否抛出了异常且异常的类型和消息与预期的匹配。其语法如下:
assert.throws(fn, [error]) assert.throws(fn, error) assert.throws(fn, errorConstructor) assert.throws(fn, regExp) assert.throws(fn, errorConstructor, regExp) assert.throws(fn, errorConstructor, regExpMessage)
其中,参数 fn
为测试的函数,参数 error
为描述异常的字符串、正则表达式或错误的构造函数。下面是一个使用 assert.throws(...)
方法的示例代码:
// javascriptcn.com 代码示例 function divide(dividend, divisor) { if (divisor === 0) { throw new Error('Divisor cannot be zero') } return dividend / divisor } describe('divide', () => { it('should throw an error when divisor is zero', () => { assert.throws(() => divide(10, 0), 'Divisor cannot be zero') }) })
在这个示例代码中,我们使用了 assert.throws(...)
方法测试 divide
函数在除数为 0 的情况下是否会抛出一个带有错误消息的异常。与 expect(...).to.throw(...)
方法类似,这个方法也会在测试失败时抛出一个异常。
should.Throw(...)
除了 expect(...).to.throw(...)
和 assert.throws(...)
之外,Chai 还提供了一个 should.Throw(...)
方法,与 expect(...).to.throw(...)
的用法基本相同。该方法的语法如下:
fn.should.throw([error]) fn.should.throw(error) fn.should.throw(errorConstructor) fn.should.throw(regExp) fn.should.throw(errorConstructor, regExp) fn.should.throw(errorConstructor, regExpMessage)
其中,参数 fn
为测试的函数,参数 error
为描述异常的字符串、正则表达式或错误的构造函数。下面是一个使用 should.Throw(...)
方法的示例代码:
// javascriptcn.com 代码示例 function divide(dividend, divisor) { if (divisor === 0) { throw new Error('Divisor cannot be zero') } return dividend / divisor } describe('divide', () => { it('should throw an error when divisor is zero', () => { (() => divide(10, 0)).should.throw('Divisor cannot be zero') }) })
在这个示例代码中,我们使用了 should.Throw(...)
方法测试 divide
函数在除数为 0 的情况下是否会抛出一个带有错误消息的异常。与 expect(...).to.throw(...)
方法类似,这个方法也可以告知我们在测试失败时的错误信息。
总结
在使用 Chai 进行 JavaScript 测试时,测试抛出异常的代码是很重要的。本文介绍了三种在 Chai 中测试抛出异常的方法,包括使用 expect(...).to.throw(...)
、assert.throws(...)
和 should.Throw(...)
方法。通过这些方法,我们可以轻松地测试代码在异常情况下的表现,并确保应用程序具有健壮性及对异常情况的处理能力。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653643057d4982a6ebe3eaf9