无法使用 jest testMatch glob 模式定位测试目录

Can't target test directory with jest testMatch glob pattern

假设我有一个如下所示的项目结构:

src/index.js
src/test/foo.js
test/integration/src/index.test.js
test/unit/src/index.test.js
jest.config.json

jest.config.json 我有我的 testMatch

{
  "testMatch": [
    "test/**"
  ]
}

当我运行与--config jest.config.json开玩笑时,它匹配0个文件。

  testMatch: test/** - 0 matches
  testPathIgnorePatterns: /node_modules/ - 5 matches
  testRegex:  - 0 matches
Pattern:  - 0 matches

我认为它可能与某些不正确的 rootDir 有关,因为 testMatch 与此相关。我 运行 开玩笑地在调试模式下查看我的 root,它似乎是正确的。它显示了我的项目目录。 (其中 jest.config.json 存在)

当我将 testMatch 更改为 **/test/** 时,它可以在 test/ 目录中检测到我的测试,但这不是我想要的,因为它也与 src/test/ 目录匹配.

为什么它无法在 test/ 目录中检测到我的测试?我的 glob 模式不正确吗?

Why it cannot detect my tests in test/ directory? Is my glob pattern incorrect?

Jest 的 glob 实现一直在 some issues as of late. Under the hood Jest uses micromatch,但它为何挂在相对路径 glob 上尚不清楚。

您可以在 Jest 配置中尝试一些操作:

  1. <rootDir> 字符串标记直接包含在 testMatch glob 中,例如 testMatch: ['<rootDir>/test/**']
  2. 更密切地关注 Jest testMatch documentation 中的 globstar 示例,注意有关 glob 顺序的注释:

Note: Each glob pattern is applied in the order they are specified in the config. (For example ["!/fixtures/", "/tests//.js"] will not exclude fixtures because the negation is overwritten with the second pattern. In order to make the negated glob work in this example it has to come after /tests//.js.)

  testMatch: [
    '**/test/**',
    '!**/src/**'
  ]