对 Jest 测试文件进行 linting 时,eslint 会抛出“no-undef”错误

use*_*003 41 javascript unit-testing eslint jestjs

我正在使用 Jest 编写一些规范,并使用 ESLint 来整理样式。

对于我的foo.spec.js测试,eslint 不断抛出以下错误。它似乎认为jestbeforeEachafterEach,等...没有在该文件中定义。

   11:1   error  'beforeEach' is not defined  no-undef
   12:3   error  'jest' is not defined        no-undef
   14:13  error  'jest' is not defined        no-undef
   18:1   error  'afterEach' is not defined   no-undef
   20:1   error  'describe' is not defined    no-undef
   21:3   error  'it' is not defined          no-undef
   25:5   error  'expect' is not defined      no-undef
   28:5   error  'expect' is not defined      no-undef
   31:5   error  'expect' is not defined      no-undef
   34:3   error  'it' is not defined          no-undef
   38:5   error  'expect' is not defined      no-undef
   41:5   error  'jest' is not defined        no-undef
   42:5   error  'expect' is not defined      no-undef
   43:5   error  'expect' is not defined      no-undef
   46:3   error  'it' is not defined          no-undef
   54:5   error  'expect' is not defined      no-undef
   58:5   error  'jest' is not defined        no-undef
Run Code Online (Sandbox Code Playgroud)

我相信这些是 jest 自动包含的,因此不需要在我的规范文件中明确导入。事实上,我通过jest.setup.js文件导入的唯一内容是

import "react-testing-library/cleanup-after-each";
import "jest-dom/extend-expect";
Run Code Online (Sandbox Code Playgroud)

有没有办法消除这些错误而不必在每个单独的文件或内联的顶部禁用 eslint 规则?

谢谢!

小智 78

请将以下内容添加到您的 .eslintrc 文件中:

{
  "overrides": [
    {
      "files": [
        "**/*.spec.js",
        "**/*.spec.jsx"
      ],
      "env": {
        "jest": true
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)


Sea*_*Lee 11

有一个类似的问题,eslint 为我的 jest setup.js 文件抛出 no-undef 错误,其中包含一些 jest.mocks。

最终通过使用JestESLint 插件修复它。

将插件安装为开发依赖项后,我按照插件自述文件中的说明将以下内容合并到我的 .eslintrc 配置文件中。

{
  "extends": ["plugin:jest/recommended"],
  "plugins": ["jest"]
}
Run Code Online (Sandbox Code Playgroud)

然后 no-undef 错误消失了。


Kan*_*now 11

You do not need to add this override option and specify in which files jest should be available. Adding only env field should be enough.

.eslintrc.js:

module.exports = {
  env: {
    jest: true
  },
//...
}
Run Code Online (Sandbox Code Playgroud)

  • 为我工作,谢谢。如果其他人需要,我的`.eslint.json`文件现在有:`"env": { "commonjs": true, "es2021": true, "node": true, "jest": true }` (2认同)

小智 7

我面临着同样的问题!我看到一个添加评论的答案,如下所示:

/* eslint-env jest */
Run Code Online (Sandbox Code Playgroud)

这效果最好,因为我不想安装任何不必要的插件或配置语句。

将此注释添加到您的所有测试文件中,您就完成了!

致谢: https: //stackoverflow.com/users/154133/friederbluemle向该用户提供最简单的解决方案!