eslint 在检查 Jest 测试文件时抛出 `no-undef` 错误

问题描述 投票:0回答:7

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

对于我的

foo.spec.js
测试,eslint 不断抛出以下错误。似乎认为
jest
beforeEach
afterEach
等...未在该文件中定义。

   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

我相信这些是由 jest 自动包含的,因此不需要在我的规范文件中显式导入。事实上,我通过

jest.setup.js
文件导入的唯一内容是

import "react-testing-library/cleanup-after-each";
import "jest-dom/extend-expect";

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

谢谢!

javascript unit-testing jestjs eslint
7个回答
192
投票

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

{
  "overrides": [
    {
      "files": [
        "**/*.spec.js",
        "**/*.spec.jsx"
      ],
      "env": {
        "jest": true
      }
    }
  ]
}

131
投票

您不需要添加此覆盖选项并指定

jest
应在哪些文件中可用。仅添加
env
字段就足够了。

.eslintrc.js:

module.exports = {
  env: {
    jest: true
  },
//...
}

24
投票

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

最终使用 Jest 的 ESLint 插件修复了它。

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

{ "extends": ["plugin:jest/recommended"], "plugins": ["jest"] }
然后 no-undef 错误就消失了。


8
投票
我也面临着同样的问题! 我看到了添加这样的评论的答案:

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

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

致谢:

https://stackoverflow.com/users/154133/friederbluemle 此用户提供了最简单的解决方案!


2
投票
该环境也可以应用于单个文件(无需修改配置文件)。

例如,在文件顶部使用此注释:

/* eslint-env jest */
当有一些文件(例如

jest.setup.js

)访问
jest.
并且位于
外部常规测试文件夹时,这可能很有用。


0
投票

由于我使用的是 StandardJS Linter,所以建议的解决方案都不适合我。相反,我必须在我的标准配置中为“它”定义一个全局变量。

例如在

package.json

...
  "standard": {
    "parser": "babel-eslint",
    "globals": [
      "afterAll",
      "beforeAll",
      "afterEach",
      "jasmine",
      "describe",
      "test",
      "jest",
      "expect",
      "it"
    ]
 }
...

0
投票

新的平面文件 ESLint 配置(例如

eslint.config.js
eslint.config.mjs
)需要不同的解决方案,因为它们缺少设置为
env
jest
选项。

这种方法为我解决了 ESLint

is not defined
错误,因此我分享它以防其他人遇到同样的问题。

import globals from "globals";

export default [
  {languageOptions: { globals: globals.jest }},
  ...
];
© www.soinside.com 2019 - 2024. All rights reserved.