我试图使用ESLint linter与Jest测试框架。

Jest测试与一些全局变量(如Jest)一起运行,我需要告诉linter;但棘手的是目录结构,在Jest中,测试与源代码一起嵌入在__tests__文件夹中,因此目录结构看起来像这样:

src
    foo
        foo.js
        __tests__
            fooTest.js
    bar
        bar.js
        __tests__
            barTest.js

通常,我将所有的测试都放在一个目录下,我可以在那里添加一个.eslintrc文件来添加全局变量…但我当然不想在每个__test__目录下都添加一个.eslintrc文件。

目前,我只是将测试全局变量添加到全局的.eslintrc文件中,但由于这意味着我现在可以在非测试代码中引用笑话,这似乎不是“正确”的解决方案。

是否有一种方法让eslint应用基于目录名或类似内容的模式的规则?


当前回答

在你的.eslintignore文件中添加以下值:

**/__tests__/

这应该忽略__tests__目录的所有实例及其子目录。

其他回答

一些答案假设你已经安装了eslint-plugin-jest,但是不需要这样做,你可以简单地在你的.eslintrc文件中这样做,添加:

  "globals": {
    "jest": true,
  }

从ESLint V 6(2019年底发布)开始,你可以在基于glob的配置中使用extends,如下所示:

    "overrides": [
      {
        "files": ["*.test.js"],
        "env": {
          "jest": true
        },
        "plugins": ["jest"],
        "extends": ["plugin:jest/recommended"]
      }
    ]

ESLint从>= 4版本开始支持:

/*
.eslintrc.js
*/
const ERROR = 2;
const WARN = 1;

module.exports = {
  extends: "eslint:recommended",
  env: {
    es6: true
  },
  overrides: [
    {
      files: [
        "**/*.test.js"
      ],
      env: {
        jest: true // now **/*.test.js files' env has both es6 *and* jest
      },
      // Can't extend in overrides: https://github.com/eslint/eslint/issues/8813
      // "extends": ["plugin:jest/recommended"]
      plugins: ["jest"],
      rules: {
        "jest/no-disabled-tests": "warn",
        "jest/no-focused-tests": "error",
        "jest/no-identical-title": "error",
        "jest/prefer-to-have-length": "warn",
        "jest/valid-expect": "error"
      }
    }
  ],
};

这里有一个变通方法(从这里的另一个答案,投票!)对于eslint配置的“扩展覆盖”限制:

overrides: [
  Object.assign(
    {
      files: [ '**/*.test.js' ],
      env: { jest: true },
      plugins: [ 'jest' ],
    },
    require('eslint-plugin-jest').configs.recommended
  )
]

从https://github.com/eslint/eslint/issues/8813 # issuecomment - 320448724

在你的.eslintignore文件中添加以下值:

**/__tests__/

这应该忽略__tests__目录的所有实例及其子目录。

REF,我解决了这个问题

Run

# For Yarn
yarn add eslint-plugin-jest -D

# For NPM
npm i eslint-plugin-jest -D

然后添加你的.eslintrc文件

{
    "extends": ["airbnb","plugin:jest/recommended"],
}