我正在使用 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 规则?
谢谢!
请将以下内容添加到您的 .eslintrc 文件中:
{
"overrides": [
{
"files": [
"**/*.spec.js",
"**/*.spec.jsx"
],
"env": {
"jest": true
}
}
]
}
您不需要添加此覆盖选项并指定
jest
应在哪些文件中可用。仅添加 env
字段就足够了。
.eslintrc.js:
module.exports = {
env: {
jest: true
},
//...
}
也有类似的问题,eslint 为我的 jest setup.js 文件抛出 no-undef 错误,其中包含一些 jest.mocks。
最终使用 Jest 的 ESLint 插件修复了它。
将插件安装为开发依赖项后,我按照插件自述文件中的说明将以下内容合并到我的 .eslintrc 配置文件中。
{
"extends": ["plugin:jest/recommended"],
"plugins": ["jest"]
}
然后 no-undef 错误就消失了。
/* eslint-env jest */
这效果最好,因为我不想安装任何不必要的插件或配置语句。将此注释添加到您的所有测试文件中,您就完成了!
致谢:
https://stackoverflow.com/users/154133/friederbluemle 此用户提供了最简单的解决方案!
例如,在文件顶部使用此注释:
/* eslint-env jest */
当有一些文件(例如jest.setup.js
)访问
jest.
并且位于外部常规测试文件夹时,这可能很有用。
由于我使用的是 StandardJS Linter,所以建议的解决方案都不适合我。相反,我必须在我的标准配置中为“它”定义一个全局变量。
例如在
package.json
:
...
"standard": {
"parser": "babel-eslint",
"globals": [
"afterAll",
"beforeAll",
"afterEach",
"jasmine",
"describe",
"test",
"jest",
"expect",
"it"
]
}
...
新的平面文件 ESLint 配置(例如
eslint.config.js
、eslint.config.mjs
)需要不同的解决方案,因为它们缺少设置为 env
的 jest
选项。
这种方法为我解决了 ESLint
is not defined
错误,因此我分享它以防其他人遇到同样的问题。
import globals from "globals";
export default [
{languageOptions: { globals: globals.jest }},
...
];