gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:28:30 25 4
gpt4 key购买 nike

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

最佳答案

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

You can provide an optional argument to test that a specific error isthrown:

  • regular expression: error message matches the pattern
  • string: error message includes the substring
  • error object: error message is equal to the message property of the object
  • error class: error object is instance of class

在您的情况下,您可以使用:
  • 正则表达式选项
     .toThrow(/\(foo\)/)
    (你不需要一个字符类来转义括号)或者通过一个函数运行字符串来为你转义它(参见例如 Is there a RegExp.escape function in Javascript? )然后将它传递给 new RegExp ;或者
  • 字符串选项
     .toThrow("(foo)")
  • 关于javascript - 如何检查函数是否抛出包含 Jest 文本的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64275525/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com