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

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


宝慕林4294392
浏览 121回答 1
1回答

小唯快跑啊

toThrow不接受匹配器。根据文档,可选的错误参数有四个选项:您可以提供一个可选参数来测试是否抛出了特定错误:正则表达式:错误消息与模式匹配string: 错误信息包含子串error对象:错误信息等于对象的message属性错误类:错误对象是类的实例在您的情况下,您可以使用:正则表达式选项 .toThrow(/\(foo\)/)(你不需要一个字符类只是为了转义括号)或者通过一个函数运行字符串来为你转义它然后将它传递给new RegExp; 或者字符串选项 .toThrow("(foo)")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript