【问题标题】:How do you setup multiple jest configs within a single project?如何在单个项目中设置多个 jest 配置?
【发布时间】:2022-02-01 17:18:13
【问题描述】:

create-react-app 样板文件中,它具有使用相同package.json 文件的服务器和客户端代码。我想要三个独立的笑话配置:客户端单元测试、服务器单元测试和服务器集成测试。不幸的是,我无法让它工作。我的计划是为每个选项设置yarn run 命令,然后使用--config CLI 选项指定要开玩笑的配置。但后来我遇到了this roadblock,这发生在 v20 和 v21 上,并且没有显示任何进展。基本上,人们报告使用--config 读取配置文件的问题,而后备是使用配置package.json。不幸的是,您只能指定一个配置文件。

有没有人设法让它工作,如果有,你能描述你的设置(开玩笑的版本等)。我想知道我是否需要降级到v19。或者,我只是采取了错误的方法吗?

【问题讨论】:

    标签: reactjs jestjs


    【解决方案1】:

    显然,jest 的新功能是--projects 选项。你可以在你的 package.json 文件中做这样的事情:

    "jest": {
      "projects": [
        "src/client/jest.config.js",
        "src/server/unit.jest.config.js",
        "src/server/int.jest.config.js",
       ]
    }
    

    然后在src/client/jest.config.js可以定义具体的配置:

    module.exports = {
      name: 'client',
      displayName: 'client',
    
      // NOTE: if you don't set this correctly then when you reference
      // it later in a path string you'll get a confusing error message.
      // It says something like' Module <rootDir>/config/polyfills.js in
      // the setupFiles option was not found.'
      rootDir: './../../',
    
      testMatch: [
        "<rootDir>/src/server/**/__tests__/*.unit.{js,jsx}",
        "<rootDir>/src/server/**/__tests__/unit/*.{js,jsx}"
      ],
    
      // etc...
    };
    

    这是描述该功能的帖子: https://facebook.github.io/jest/blog/2017/05/06/jest-20-delightful-testing-multi-project-runner.html

    【讨论】:

      【解决方案2】:

      我有一个非常相似的问题。我想在开发时在本地运行一个轻量级的笑话,但在管道中运行一个更重的、具有测试覆盖率的笑话。

      我找到的解决方案是将标志传递到配置中。

      package.json

      {
        "name": "project",
        "version": "1.0.0",
        "scripts": {
          "test": "cross-env DEV=false jest --maxWorkers=30% ",
          "test:coverage": "cross-env DEV=true jest --collectCoverage"
        }
      }
      

      然后在jest.config.js文件中

      module.exports = () => {
        // only collect cover if true
        const isDev = process.env.DEV === 'true';
        
        return {
          "collectCoverage": isDev ? false : true,
          "collectCoverageFrom": [
            "src/**/*.{js,ts, tsx}"
          ],
          "coverageDirectory": "coverage",
          "roots": [
            "<rootDir>/src"
            ]
        };
      };
      

      现在您将能够更改配置,但对所有设置使用相同的文件。

      【讨论】:

        猜你喜欢
        • 2019-11-20
        • 2013-07-06
        • 2011-10-05
        • 1970-01-01
        • 2010-10-05
        • 2020-04-05
        • 1970-01-01
        • 2015-09-23
        • 2016-03-23
        相关资源
        最近更新 更多