首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查函数是否抛出包含Jest中文本的错误?

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

Stack Overflow用户
提问于 2020-10-09 07:16:04
回答 1查看 3.3K关注 0票数 7
代码语言:javascript
复制
function foo() {
  throw new Error('an error from (foo)');
}

我想检查错误是否包含文本(foo),我尝试:

代码语言:javascript
复制
expect(() => foo()).toThrow(expect.stringContaining('(foo)'))

但是它失败了,并且不像预期的那样工作:

代码语言:javascript
复制
 ● 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)');
            |         ^

虽然我可以找到一种使用regex的方法,比如:

代码语言:javascript
复制
expect(() => foo()).toThrowError(/[(]foo[)]/)

但这需要我逃避一些特殊的角色,这不是我想要的。

为什么在这种情况下不支持expect.stringContaining?还是我错过了什么?

一个用于尝试的小演示:https://github.com/freewind-demos/typescript-jest-expect-throw-error-containing-text-demo

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-09 07:28:24

toThrow不接受比赛。每个文献资料的可选错误参数有四个选项:

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

  • 正则表达式:错误消息与模式的匹配
  • 字符串:错误消息包括子字符串
  • 错误对象:错误消息是,等于对象的message属性
  • 错误类:错误对象是类的实例

在您的情况下,您可以使用以下两种方法:

  • regex选项 .toThrow(/(foo)/) (您不需要一个字符类来转义括号),或者通过一个函数运行字符串来转义它(例如,Javascript中有RegExp.escape函数吗?),然后将它传递给new RegExp;或
  • 字符串选项 .toThrow("(foo)")
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64275525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档