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 回答
![?](http://img1.sycdn.imooc.com/533e4cf4000151f602000200-100-100.jpg)
小唯快跑啊
TA贡献1863条经验 获得超2个赞
toThrow
不接受匹配器。根据文档,可选的错误参数有四个选项:
您可以提供一个可选参数来测试是否抛出了特定错误:
正则表达式:错误消息与模式匹配
string: 错误信息包含子串
error对象:错误信息等于对象的message属性
错误类:错误对象是类的实例
在您的情况下,您可以使用:
正则表达式选项
.toThrow(/\(foo\)/)
(你不需要一个字符类只是为了转义括号)或者通过一个函数运行字符串来为你转义它然后将它传递给
new RegExp
; 或者字符串选项
.toThrow("(foo)")
添加回答
举报
0/150
提交
取消