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

Posted

技术标签:

【中文标题】对 Jest 测试文件进行 linting 时,eslint 会抛出 `no-undef` 错误【英文标题】:eslint throws `no-undef` errors when linting Jest test files 【发布时间】:2019-10-17 07:39:52 【问题描述】:

我正在使用 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

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

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

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

谢谢!

【问题讨论】:

这能回答你的问题吗? How to use ESLint with Jest 【参考方案1】:

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


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

【讨论】:

【参考方案2】:

您无需添加此覆盖选项并指定jest 应该在哪些文件中可用。只添加env 字段就足够了。

.eslintrc.js

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

【讨论】:

这本身对我不起作用。如果我在 tsconfig 中排除 spec 文件,我可以组合一个配置来修复 no-def 问题,但不会导致 jest 和生产文件之间的一致 linting,这是我寻求的圣杯.我继续我的追求。 为我工作,谢谢。如果其他人需要,我的.eslint.json 文件现在有:"env": "commonjs": true, "es2021": true, "node": true, "jest": true 谢谢。这对我有用。【参考方案3】:

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

最终使用ESLint plugin for Jest 修复它。

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


  "extends": ["plugin:jest/recommended"],
  "plugins": ["jest"]

那么 no-undef 错误就消失了。

【讨论】:

不幸的是,这对我也不起作用。

以上是关于对 Jest 测试文件进行 linting 时,eslint 会抛出 `no-undef` 错误的主要内容,如果未能解决你的问题,请参考以下文章

jest 忽略某些jest文件

使用 Jest、AudioContext 进行测试和模拟

使用 Vue.js 学习 JEST:第一个示例测试时出错

使用 Jest 进行测试失败并出现错误:查看文件以进行更改时出错:EMFILE

使用 Jest 对 Vuetify 数据表进行单元测试

Jest单元测试进阶