如何在纱线 monorepo 中使用 lint-staged 设置笑话 ESM 测试

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

我正在尝试在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 退出,使用

--passWithNoTests
运行以 退出并显示代码 0 在 /Users/Saud/git/monorepo 中检查了 5641 个文件 涵盖 84 个项目。使用
--verbose
运行以获取更多详细信息。图案: /Users/Saud/git/monorepo/example-project/pages/CheckoutPage.js - 0 比赛

有趣的是,它正在与更改的文件进行匹配,而我没有在命令中指定任何选项,例如 --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 的测试文件。

jestjs es6-modules yarn-workspaces lint-staged
1个回答
0
投票

所以我错误地使用了 lint-staged。当一个文件发生更改时,我试图运行 monorepo 中的所有测试。正如 @jonrsharpe 让我意识到我没有正确理解 lint-staged 。它是一个检查将要提交的文件的工具,因此它只允许运行那些通过传递“--findRelatedTests”而更改了文件的测试

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