JavaScript中如何使用assert测试函数是否抛出预期错误信息
问题原因
- 你当前使用的
assert.strictEqual会在参数计算阶段就直接执行sum(4, "5"),这个调用本身会抛出未被捕获的错误,不会进入断言的对比逻辑,因此程序直接终止。
解决方案
Node.js内置的assert模块提供了专门用于验证函数抛出预期错误的API assert.throws,该API会自动执行传入的函数并捕获抛出的错误,和预期值做对比,匹配成功则测试通过无输出。
正确代码示例
const assert = require('assert'); function sum(a, b) { if (typeof a !== 'number' || typeof b !== 'number') { throw new Error('parameters must be numbers'); } return a + b; } // 写法1:匹配错误信息正则即可 assert.throws(() => sum(4, "5"), /parameters must be numbers/); // 写法2:完整匹配错误实例 assert.throws(() => sum("4", 5), new Error('parameters must be numbers')); // 写法3:同时匹配错误类型和信息 assert.throws(() => sum("4", "5"), { name: 'Error', message: 'parameters must be numbers' });
注意事项
- 务必将可能抛出错误的调用包裹在匿名箭头函数内,不要直接执行函数,否则还是会提前触发未捕获错误。
- 如果需要验证函数没有抛出错误,可以使用对应的
assert.doesNotThrowAPI。
内容的提问来源于stack exchange,提问作者user12048519
相关产品推荐
相关产品推荐

