首页 > 解决方案 > 如何使用 Jest 配置全局阈值以匹配“所有文件”值?

问题描述

当我使用 --coverage 标志集运行测试时,我收到一条消息,指出我的全局覆盖率阈值未达到。但是当我查看报告中的“所有文件”部分时,它似乎符合我设定的阈值。

起初我认为这是我对 React 组件的覆盖率低,但是当我排除所有组件时,全局百分比仅上升了 1% 或 2%。

所以我的问题是,如何将全局阈值与“所有文件”结果对齐?

这是我运行测试时得到的报告

    ----------------------------|----------|----------|----------|----------|-------------------|
    File                        |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
    ----------------------------|----------|----------|----------|----------|-------------------|
    All files                   |    86.39 |    80.53 |    90.12 |    87.16 |                   |
    src                         |      100 |      100 |      100 |      100 |                   |
      settings.js               |      100 |      100 |      100 |      100 |                   |
    src/actions                 |      100 |    72.22 |      100 |      100 |                   |
      deploysActions.js         |      100 |       50 |      100 |      100 |                30 |
      environmentsActions.js    |      100 |       75 |      100 |      100 |                31 |
      errorsActions.js          |      100 |      100 |      100 |      100 |                   |
      systemsActions.js         |      100 |       50 |      100 |      100 |                24 |
      tagsActions.js            |      100 |       75 |      100 |      100 |                31 |
      testResultsActions.js     |      100 |       50 |      100 |      100 |                35 |
      timeRangeActions.js       |      100 |      100 |      100 |      100 |                   |
    src/constants               |      100 |      100 |      100 |      100 |                   |
      actions.js                |      100 |      100 |      100 |      100 |                   |
      responseColumns.js        |      100 |      100 |      100 |      100 |                   |
    src/middleware              |        0 |        0 |        0 |        0 |                   |
      localStorageMiddleware.js |        0 |        0 |        0 |        0 |      4,5,6,7,8,11 |
      loggerMiddleware.js       |        0 |      100 |        0 |        0 |     1,2,3,4,5,6,7 |
    src/reducers                |    88.55 |    80.17 |    97.37 |    88.05 |                   |
      authReducer.js            |        0 |        0 |        0 |        0 |... 44,49,55,56,60 |
      deploysReducer.js         |      100 |    86.67 |      100 |      100 |                77 |
      environmentsReducer.js    |      100 |      100 |      100 |      100 |                   |
      errorsReducer.js          |      100 |      100 |      100 |      100 |                   |
      rootReducer.js            |        0 |      100 |      100 |        0 |                11 |
      systemsReducer.js         |      100 |      100 |      100 |      100 |                   |
      tagsReducer.js            |      100 |      100 |      100 |      100 |                   |
      testResultsReducer.js     |      100 |    97.37 |      100 |      100 |               122 |
      timeRangeReducer.js       |      100 |      100 |      100 |      100 |                   |
    src/store                   |        0 |        0 |        0 |        0 |                   |
      configureStore.js         |        0 |        0 |        0 |        0 |... 11,13,15,16,18 |
    src/utils                   |    94.55 |       94 |      100 |    94.55 |                   |
      api.js                    |      100 |      100 |      100 |      100 |                   |
      dateTimeFormatting.js     |      100 |      100 |      100 |      100 |                   |
      environments.js           |      100 |      100 |      100 |      100 |                   |
      errors.js                 |      100 |      100 |      100 |      100 |                   |
      localStorage.js           |       75 |       25 |      100 |       75 |          18,19,21 |
    ----------------------------|----------|----------|----------|----------|-------------------|
    Jest: "global" coverage threshold for statements (50%) not met: 4%
    Jest: "global" coverage threshold for branches (50%) not met: 0%
    Jest: "global" coverage threshold for lines (50%) not met: 4.76%
    Jest: "global" coverage threshold for functions (40%) not met: 0%

这是我开玩笑的配置(注意,组件目录不包括在内)

"jest": {
    "collectCoverageFrom": [
        "src/**/*.js",
        "!**/node_modules/**",
        "!**/coverage/**",
        "!src/components/**",
        "!src/index.js",
        "!src/serviceWorker.js"
    ],
    "coverageReporters": ["html", "cobertura", "json", "lcov", "text", "clover"],
    "coverageThreshold": {
        "global": {
            "branches": 50,
            "functions": 40,
            "lines": 50,
            "statements": 50
        }
    }
}

标签: reactjstestingjestjs

解决方案


我遇到了同样的问题,但无法找到解决方案。

我使用的解决方法是为每个文件夹设置覆盖范围。使用jest.config.js

coverageThreshold: {
    './src/actions': {
      branches: 80,
      functions: 80,
      lines: 80,
      statements: 80
    },
    './src/reducers': {
      branches: 80,
      functions: 80,
      lines: 80,
      statements: 80
    }
}

如果您找到了解决此问题的实际方法,请告诉我。

你可以做的另一件事,而不是全局是。

coverageThreshold: {
    '*/**': {
      branches: 80,
      functions: 80,
      lines: 80,
      statements: 80
    },

尽管这会检查每个文件的 80% 覆盖率。不是我们正在寻找的所有文件的实际平均值


推荐阅读