我正在尝试在yarn pnp monorepo 中运行 jest 进行 ESM 测试,
// list-staged.config.js
export default {
'**/*.js': [
'eslint',
'yarn run staged',
'git add',
]
}
在我的根目录中暂存脚本命令
package.json
,
"script": {
"staged": "yarn node --experimental-vm-modules $(yarn bin jest)",
...
}
当我尝试提交文件中的代码时
/example-project/pages/CheckoutPage.js
,lint-staged 应该只运行 monorepo 中的所有测试,但我收到此错误(请注意,monorepo 中有大约 84 个微服务),
未找到测试,使用代码 1 退出,使用
运行以 退出并显示代码 0 在 /Users/Saud/git/monorepo 中检查了 5641 个文件 涵盖 84 个项目。使用--passWithNoTests
运行以获取更多详细信息。图案: /Users/Saud/git/monorepo/example-project/pages/CheckoutPage.js - 0 比赛--verbose
有趣的是,它正在与更改的文件进行匹配,而我没有在命令中指定任何选项,例如 --onlyChanged 或 --findRelatedTests。
根级别 jest.config.js:
import collectCoverageFrom from './jest.collectCoverageFrom.js'
export default {
collectCoverageFrom,
coverageReporters: ['lcov'],
modulePathIgnorePatterns: [
'<rootDir>/example-project',
],
projects: [
'<rootDir>/example-project',
],
testEnvironment: 'jsdom',
}
示例项目/jest.config.js:
import { readFile } from 'fs/promises'
import excludeCoverageFrom from '@monorepo/root/jest.excludeCoverageFrom.js'
export default {
collectCoverageFrom: [
'<rootDir>/example-project/**/*.js',
...excludeCoverageFrom,
],
displayName: 'example-project',
rootDir: '../',
roots: ['<rootDir>/example-project'],
setupFilesAfterEnv: [
// '<rootDir>/jest.window.setImmediate.js',
'<rootDir>/jest.window.scrollTo.js',
'<rootDir>/jest.window.TextEncoder.js',
'@testing-library/jest-dom/extend-expect',
],
testEnvironment: 'jsdom',
moduleNameMapper: {
'\\.(jpg|jpeg|png|svg|webp)$': '<rootDir>/__mocks__/mockImage.js',
},
testPathIgnorePatterns: [
'/cdk.out/',
'/assets-.*/',
'/bundles-.*/',
'/lambda-.*/',
],
coverageThreshold: {
global: {
branches: 50,
functions: 50,
lines: 50,
statements: 50,
},
},
transformIgnorePatterns: ['node_modules/(?!uuid)'],
}
当我运行脚本本身时,测试工作正常。由于某种原因,lint-staged 无法处理yarn 命令来运行带有ESM 支持的jest 测试。我的要求是通过传递诸如“--findRelatedTests”之类的选项来对提交运行相关测试,但现在我只是想让它工作。有人遇到过这个问题吗
其他见解,我尝试使用标志 --findRelatedTests,这些是来自 sourcetree 的以下提交日志,
[STARTED] Preparing lint-staged...
[SUCCESS] Preparing lint-staged...
[STARTED] Running tasks for staged files...
[STARTED] lint-staged.config.js — 1 file
[STARTED] **/*.js — 1 file
[STARTED] eslint
[SUCCESS] eslint
[STARTED] yarn run staged
[SUCCESS] yarn run staged
[STARTED] git add
[SUCCESS] git add
[SUCCESS] **/*.js — 1 file
[SUCCESS] lint-staged.config.js — 1 file
[SUCCESS] Running tasks for staged files...
[STARTED] Applying modifications from tasks...
[SUCCESS] Applying modifications from tasks...
[STARTED] Cleaning up temporary files...
[SUCCESS] Cleaning up temporary files...
Completed successfully
因此由于某种原因它没有运行任何测试。我应该提到,/example-project/pages/tests/CheckoutPage.test.js 中确实存在 CheckoutPage.js 的测试文件。
所以我错误地使用了 lint-staged。当一个文件发生更改时,我试图运行 monorepo 中的所有测试。正如 @jonrsharpe 让我意识到我没有正确理解 lint-staged 。它是一个检查将要提交的文件的工具,因此它只允许运行那些通过传递“--findRelatedTests”而更改了文件的测试