无论如何都要扩展一个jest配置文件?

Adr*_*son 11 jestjs

在我正在使用Jest测试客户端代码(testEnvironment:'jsdom')和服务器端代码(testEnvironment:'node')以及收集客户端和服务器端代码覆盖的节点应用程序中.

目前我正在使用4个具有大量冗余配置的Jest配置文件来完成此任务.

客户

{
  "bail": true,
  "verbose": true,
  "notify": true,
  "scriptPreprocessor": "./node_modules/babel-jest",
  "testPathIgnorePatterns": [
    "./node_modules",
    "./coverage",
    "./dist",
    "./build"
  ],
  "testRegex": "\\.test\\.js"
}
Run Code Online (Sandbox Code Playgroud)

客户报道

{
  "bail": true,
  "verbose": true,
  "notify": true,
  "scriptPreprocessor": "./node_modules/babel-jest",
  "testPathIgnorePatterns": [
    "./node_modules",
    "./coverage",
    "./dist",
    "./build"
  ],
  "testRegex": "\\.test\\.js",
  "collectCoverageFrom": ["**/*.js", "!**/node_modules/**"],
  "collectCoverage": true,
  "coverageDirectory": "./coverage",
  "coveragePathIgnorePatterns": [
    "./node_modules",
    "./coverage",
    "./dist",
    "./build",
    "./test"
  ],
  "coverageThreshold": {
    "global": {
      "branches": 100,
      "functions": 100,
      "lines": 100,
      "statements": 100
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

服务器

{
  "bail": true,
  "verbose": true,
  "notify": true,
  "scriptPreprocessor": "./node_modules/babel-jest",
  "testPathIgnorePatterns": [
    "./node_modules",
    "./coverage",
    "./dist",
    "./build"
  ],
  "testRegex": "\\.test\\.js",
  "testEnvironment": "node"
}
Run Code Online (Sandbox Code Playgroud)

服务器覆盖

{
  "bail": true,
  "verbose": true,
  "notify": true,
  "scriptPreprocessor": "./node_modules/babel-jest",
  "testPathIgnorePatterns": [
    "./node_modules",
    "./coverage",
    "./dist",
    "./build"
  ],
  "testRegex": "\\.test\\.js",
  "testEnvironment": "node",
  "collectCoverageFrom": ["**/*.js", "!**/node_modules/**"],
  "collectCoverage": true,
  "coverageDirectory": "./coverage",
  "coveragePathIgnorePatterns": [
    "./node_modules",
    "./coverage",
    "./dist",
    "./build",
    "./test"
  ],
  "coverageThreshold": {
    "global": {
      "branches": 100,
      "functions": 100,
      "lines": 100,
      "statements": 100
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如何在不重复4次配置的情况下实现此目的?我查看了preset配置选项.使用它我必须为每个配置创建一个单独的包.这是推荐的方式吗?

am0*_*0wa 23

是的,您可以定义共享jest.config.js 并在您的特定配置中重用它:

  • 最好<rootDir>在共享配置中的所有路径中使用,因此这些路径也可以重复使用。

client/jest.config.js

const sharedConfig = require('../jest.config.js');
module.exports = {
  ...sharedConfig,
  'rootDir': './',
}
Run Code Online (Sandbox Code Playgroud)

server/jest.config.js

const sharedConfig = require('../jest.config.js');
module.exports = {
  ...sharedConfig,
  'rootDir': './',
  "testEnvironment": "node"
}
Run Code Online (Sandbox Code Playgroud)

如果需要,您还可以重复使用 jest 默认值:Jest 文档 - 配置 Jest


Mic*_*ała 4

是的,从 Jest v20 开始,您可以将配置定义为 JS 文件,并使用它来共享类似配置的公共部分。有关配置 Jest 的文档

默认情况下,Jest 查找:

  • jest.config.js
  • "jest"进入package.json

...并将父目录视为rootDir.

另外请务必检查该projects选项,这使得在 monorepos 中运行 Jest 变得更容易(例如,一个代码库中的客户端 + 服务器代码)。请参阅此答案以供参考:用 jest 测试两个环境