如何将 ESLint 与 Jest 结合使用

2022-08-29 23:45:15

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

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

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

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

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

有没有办法让eslint根据基于目录名称的某种模式应用规则,或者类似的东西?


答案 1

文档显示您现在可以添加:

"env": {
    "jest/globals": true
}

这将把所有与开玩笑相关的东西添加到你的环境中,消除linter错误/警告。.eslintrc

您可能需要包含在您的 esconfig 中,如果插件仍然不起作用,则添加插件。plugins: ["jest"]eslint-plugin-jest


答案 2

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