即使 testMatch 有匹配项,Jest 也找不到测试

Wog*_*220 6 typescript jestjs bitbucket-pipelines ts-jest

在 bitbucket 管道中使用 Jest,它找不到测试,因此失败并出现以下错误:

\n
+ npx jest\nNo tests found, exiting with code 1\nRun with `--passWithNoTests` to exit with code 0\nIn /opt/atlassian/pipelines/agent/build\n  12 files checked.\n  testMatch: **/__tests__/**/*.[jt]s?(x), **/?(*.)+(spec|test).[tj]s?(x) - 2 matches\n  testPathIgnorePatterns: /node_modules/, /build/ - 0 matches\n  testRegex:  - 0 matches\nPattern:  - 0 matches\n
Run Code Online (Sandbox Code Playgroud)\n

在本地,我的测试运行良好。

\n

项目结构:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 coverage\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 js\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 account\n    \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 account.ts\n    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 account.test.ts\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.ts\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.test.ts\n
Run Code Online (Sandbox Code Playgroud)\n

笑话配置.js

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 coverage\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 js\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 account\n    \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 account.ts\n    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 account.test.ts\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.ts\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.test.ts\n
Run Code Online (Sandbox Code Playgroud)\n

使用以下 npm 脚本启动测试

\n
"test": "jest --coverage",\n
Run Code Online (Sandbox Code Playgroud)\n

Jest 不运行它找到的测试是否正常testMatch

\n
    \n
  • 尝试从 切换到 ,testMatchtestRegex没有成功
  • \n
  • 尝试在启动脚本中添加 src 的路径 ( npx jest ./src)
  • \n
\n

Wog*_*220 5

好吧,问题是 bitbucket 在名为\n \n的文件夹中运行管道,/opt/atlassian/pipelines/agent/build然后我的完整文件夹结构是:

\n
/opt/atlassian/pipelines/agent/build\n                                  \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n                                  \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 coverage\n                                  \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 js\n                                  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n                                      \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 account\n                                      \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 account.ts\n                                      \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 account.test.ts\n                                      \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.ts\n                                      \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.test.ts\n
Run Code Online (Sandbox Code Playgroud)\n

由于build中的testPathIgnorePatterns,所有文件夹都被忽略。
\n请参阅有关此的 Jest 文档:https ://jestjs.io/docs/configuration#testpathignorepatterns-arraystring

\n
\n

这些模式字符串与完整路径匹配。使用字符串标记包含项目根目录的路径,以防止它意外忽略可能具有不同根目录的不同环境中的所有文件。示例:[“/build/”、“/node_modules/”]。

\n
\n

解决方案是删除buildtestPathIgnorePatterns稍微更改 testMatch (在我的例子中是 testRegex):
\ntestRegex: ".*/src/.*\\\\.test\\\\.(t|j)sx?$"

\n

或者

\n

添加<rootDir>每个testPathIgnorePatterns元素

\n
 testPathIgnorePatterns: ["<rootDir>/node_modules/", "<rootDir>/build/"],\n
Run Code Online (Sandbox Code Playgroud)\n