找不到测试用例

时间:2019-08-15 15:56:41

标签: jestjs husky lint-staged

我遇到lint-staged插件一个奇怪的问题。以前运行良好。

问题是当我运行npm run test时,它会生成覆盖率报告。

"test": "cross-env CI=true react-scripts test --coverage",

enter image description here

但是,当我在husky预提交和lint-staged上运行同一命令时,它不起作用。当我检查控制台时,发现它正在针对已修改的文件运行。

> portal@0.1.0 test /Users/carlos/Desktop/portal
> cross-env CI=true react-scripts test --coverage "/Users/carlos/Desktop/portal/src/container/Auth/Login.page.js"

No tests found, exiting with code 1
Run with `--passWithNoTests` to exit with code 0
In /Users/carlos/Desktop/portal
44 files checked.
testMatch: /Users/carlos/Desktop/portal/src/**/__tests__/**/*.{js,jsx,ts,tsx}, /Users/carlos/Desktop/portal/src/**/*.{spec,test}.{js,jsx,ts,tsx} - 6 matches
testPathIgnorePatterns: /node_modules/ - 44 matches
testRegex:  - 0 matches
Pattern: /Users/carlos/Desktop/portal/src/container/Auth/Login.page.js - 0 matches
npm ERR! code ELIFECYCLE
npm ERR! errno 1

有明显的区别

我跑步时

npm run test与它一起运行

cross-env CI=true react-scripts test --coverage

并且当npm run test被沙哑且短绒的呼叫时

被称为 cross-env CI=true react-scripts test --coverage "/Users/carlos/Desktop/portal/src/container/Auth/Login.page.js"

--covrage之后有文件路径被添加

这是我的程序包JSON配置。

"jest": {
    "collectCoverageFrom": [
      "src/**/*.js"
    ],
    "coverageThreshold": {
      "global": {
        "branches": 80,
        "functions": 80,
        "lines": 80,
        "statements": 80
      }
    }
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "husky": {
      "hooks": {
        "pre-commit": "lint-staged"
      }
    },
  "lint-staged": {
      "*.js": [
        "prettier --write",
        "eslint src/ --fix",
        "npm run test",
        "git add"
      ]
   }

注意:仅当我使用pre-commit:npm run test时,这才适用于使用lint-staged的情况。

1 个答案:

答案 0 :(得分:0)

Jest正在尝试在暂存区上运行文件,这就是为什么它要添加一些文件路径的原因。

您需要的是 --findRelatedTests

"lint-staged": {
  "*.js": [
    "prettier --write",
    "eslint src/ --fix",
    "jest --bail --findRelatedTests",
    "git add"
  ]
}

--findRelatedTests将查找需要/导入作为参数传递的文件的测试文件(如果是lint-stage,则是暂存区中的文件)。您可以详细了解here的工作原理。

来自documentation

  

查找并运行测试,这些测试涵盖了作为参数传入的源文件的空格分隔列表。对于预提交挂钩集成很有用,以运行最少数量的必要测试。可以与--coverage一起使用,以包括源文件的测试范围,而无需重复的--collectCoverageFrom参数。