开玩笑:如果未找到覆盖,则在 pre-commit-hook 中运行覆盖范围为 1 的测试

pky*_*eck 6 javascript git pre-commit-hook node.js jestjs

我正在尝试用玩笑对预提交挂钩中的暂存文件运行测试。到现在为止还挺好。让它与pre-commitlint-stagedNPM 包一起工作。

来自 package.json 的片段:

{
  // ...
  "scripts": {
    "hook": "lint-staged",
    // ...
  },
  "devDependencies": {
    "eslint": "^4.12.1",
    "eslint-config-airbnb-base": "^12.1.0",
    "eslint-config-prettier": "^2.9.0",
    "eslint-plugin-import": "^2.8.0",
    "eslint-plugin-prettier": "^2.3.1",
    "jest": "^22.0.3",
    "jest-junit": "^3.4.0",
    "lint-staged": "^6.0.1",
    "pre-commit": "^1.2.2",
    "prettier": "^1.9.1"
  },
  "jest": {
    "collectCoverageFrom": ["src/**/*.js"],
    "coveragePathIgnorePatterns": ["<rootDir>/src/models/"],
    "coverageThreshold": {
      "global": {
        "branches": 80,
        "functions": 80,
        "lines": 80,
        "statements": 80
      }
    }
  },
  "pre-commit": ["hook"],
  "lint-staged": {
    "*.js": ["eslint --fix", "git add", "jest --bail --passWithNoTests --coverage"]
  },
  // ...
}
Run Code Online (Sandbox Code Playgroud)

还有更多,但我认为这些是重要的部分。

我遇到的问题是,如果我暂存没有任何测试或被忽略的 b/c 文件"coveragePathIgnorePatterns": ["<rootDir>/src/models/"],jest 将退出1- 所以没有提交。通过添加--passWithNoTests. 伟大的。但现在我也想检查覆盖率 - 当没有测试(因此没有覆盖率数据)时,这也会失败:

----------|----------|----------|----------|----------|----------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
----------|----------|----------|----------|----------|----------------|
All files |  Unknown |  Unknown |  Unknown |  Unknown |                |
----------|----------|----------|----------|----------|----------------|

            Jest: Coverage data for global was not found.
Run Code Online (Sandbox Code Playgroud)

是否有另一个标志我可以用来忽略覆盖范围(例如--passWithNoTests实际测试)?或者有人有更好的想法如何做到这一点?

或者我应该跳过这些预提交测试的覆盖范围吗?

Chu*_*gha 0

您可以使用 husky 和 ​​lint-staged 对其进行分解,如下所示:

 "lint-staged": {
    "src/**/*.(spec|test).ts": [
      "npm run test"
    ],
    "src/**/*.{ts,vue}": [
      "eslint --fix",
      "prettier --write"
    ]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
Run Code Online (Sandbox Code Playgroud)

这样,如果测试目录中没有暂存文件,它只会跳过测试并转到下一个项目,eslint --fixprettier --write