Jest测试中匹配含/的字符串出现正则语法错误该如何解决?
问题原因
报错是因为正则字面量中/是默认的边界符,同时(、)是正则的特殊功能字符,未做转义时会被JavaScript引擎识别为正则语法结束标记/特殊逻辑符,从而抛出非法标志位错误。
解决方法
你可以任选以下任意一种方案修复:
- 方案1:转义正则中的特殊字符
把正则内的/、(、)分别用反斜杠\转义即可,修改后的测试代码如下:test('Local date time format - Europe no UK', () => { const date = '2021-08-26T08:06:14Z'; const timezone = 'Europe/Berlin'; render( <DateFormatter dateTime={date} timeZone={timezone} variant="localDateTime" />, ); expect(screen.getByText(/26 Aug 2021, 8:06 \(Europe\/Berlin\)/)).toBeVisible(); }); - 方案2:直接使用精确字符串匹配(更简单,推荐)
如果不需要正则的模糊匹配能力,直接给getByText传入字符串参数即可,完全不需要处理转义问题:expect(screen.getByText('26 Aug 2021, 8:06 (Europe/Berlin)')).toBeVisible(); - 方案3:使用RegExp构造函数创建正则
如果需要动态生成匹配规则,也可以通过构造函数创建正则,注意字符串内的反斜杠需要双重转义:const matchPattern = new RegExp('26 Aug 2021, 8:06 \\(Europe\\/Berlin\\)') expect(screen.getByText(matchPattern)).toBeVisible();
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

