为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查函数是否抛出包含 Jest 文本的错误?

如何检查函数是否抛出包含 Jest 文本的错误?

宝慕林4294392 2023-04-27 10:24:43
function foo() {  throw new Error('an error from (foo)');}我想检查错误是否包含文本(foo),我试过:expect(() => foo()).toThrow(expect.stringContaining('(foo)'))但是它失败了并且没有按预期工作: ● test › checks error containing text    expect(received).toThrowError(expected)    Expected asymmetric matcher: StringContaining "(foo)"    Received name:    "Error"    Received message: "an error from (foo)"          1 | function foo() {        > 2 |   throw new Error('an error from (foo)');            |         ^尽管我可以找到一种使用正则表达式的方法,例如:expect(() => foo()).toThrowError(/[(]foo[)]/)但这需要我转义一些特殊字符,这不是我想要的。为什么expect.stringContaining在这种情况下不支持?还是我想念什么?一个尝试的小演示:https://github.com/freewind-demos/typescript-jest-expect-throw-error-containing-text-demo
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

toThrow不接受匹配器。根据文档,可选的错误参数有四个选项:

您可以提供一个可选参数来测试是否抛出了特定错误:

  • 正则表达式:错误消息与模式匹配

  • string: 错误信息包含子串

  • error对象:错误信息等于对象的message属性

  • 错误类:错误对象是类的实例

在您的情况下,您可以使用:

  • 正则表达式选项

     .toThrow(/\(foo\)/)

    (你不需要一个字符类只是为了转义括号)或者通过一个函数运行字符串来为你转义它然后将它传递给new RegExp; 或者

  • 字符串选项

     .toThrow("(foo)")


查看完整回答
反对 回复 2023-04-27
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信