为什么 Jest 使用 .[jt]s?(x) 而不是 .[jt]sx?在默认的 testMatch 配置中?

问题描述 投票:0回答:1

Jest 文档中,testMatch 配置选项的默认值为

[ "**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)" ]
。我的问题是,既然我们想要匹配 .js、.jsx、.ts 和 .tsx 等文件扩展名,为什么不是 .[jt]sx??

有两个地方不太明白:

  1. 字符“s”必须出现。
  2. 为什么“x”被放在一个组中?

非常感谢。

我在 regex101.com 上做了以下测试,似乎 .[jt]s?(x) 与预期不匹配。enter image description hereenter image description here

jestjs
1个回答
0
投票

这是因为

testMatch
被解释为 扩展的 glob 表达式,而不是正则表达式。匹配是通过 micromatch 库完成的。

特别是,扩展的 glob 语法

?(pattern)
相当于正则表达式
(pattern)?
。因此,在默认的
testMatch
值中,
[jt]s?(x)
具有
s
(必需的
s
)和
?(x)
(可选的
x
)。

testRegex
选项相比,它是一个正则表达式。它的默认值是
(/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$
,这更像你所期望的。在此模式中,字符
s
是必需的,而
x?
使
x
在此模式中可选。

© www.soinside.com 2019 - 2024. All rights reserved.