我正在尝试在Jest测试框架中使用ESLint linter。
开玩笑的测试是与某些全局变量一起运行的,例如jest
,我需要告诉短毛猫有关;但是棘手的是目录结构,通过Jest,测试是与源代码一起嵌入到__tests__
文件夹中的,因此目录结构看起来类似于:
src
foo
foo.js
__tests__
fooTest.js
bar
bar.js
__tests__
barTest.js
通常,我会将所有测试放在一个目录下,并且可以在其中添加.eslintrc
文件以添加全局变量...但是我当然不想.eslintrc
在每个__test__
目录中都添加文件。
现在,我只是将测试全局变量添加到了全局.eslintrc
文件中,但是由于那意味着我现在可以jest
在非测试代码中进行引用,因此这似乎不是“正确的”解决方案。
是否有办法让eslint根据基于目录名称的某种模式来应用规则,或者类似的方法?
文档显示您现在可以添加:
"env": {
"jest/globals": true
}
您.eslintrc
可以在其中添加所有与玩笑相关的内容,从而消除棉绒错误/警告。
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 config的“扩展覆盖范围”限制的变通方法(来自此处的另一个答案,请投票!):
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
您还可以在测试文件中设置测试环境,如下所示:
/* eslint-env jest */
describe(() => {
/* ... */
})
为了完成Zachary的答案,这是eslint config的“扩展覆盖范围”限制的解决方法:
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
基于模式的配置计划在ESLint 2.0.0版本中发布。但是,现在您必须创建两个单独的任务(如注释中所述)。一个用于测试,另一个用于测试代码,然后运行它们,同时提供不同的.eslintrc文件。
PS:ESLint的下一版本中有一个有趣的环境,它将注册所有必需的全局变量。
我解决了问题REF
跑
# For Yarn
yarn add eslint-plugin-jest -D
# For NPM
npm i eslint-plugin-jest -D
然后添加你的.eslintrc
文件
{
"extends": ["airbnb","plugin:jest/recommended"],
}
仅为__tests__
文件夹添加环境
您可以.eslintrc.yml
在__tests__
文件夹中添加一个文件,以扩展您的基本配置:
extends: <relative_path to .eslintrc>
env:
jest: true
如果只有一个__tests__
文件夹,则此解决方案是最佳解决方案,因为它仅在需要的地方作用于jest环境。
处理许多测试文件夹
如果您有更多测试文件夹(OPs情况),我仍然建议添加这些文件。如果您有大量的这些文件夹,可以使用简单的zsh脚本添加它们:
#!/usr/bin/env zsh
for folder in **/__tests__/ ;do
count=$(($(tr -cd '/' <<< $folder | wc -c)))
echo $folder : $count
cat <<EOF > $folder.eslintrc.yml
extends: $(printf '../%.0s' {1..$count}).eslintrc
env:
jest: true
EOF
done
该脚本将查找__tests__
文件夹并将.eslintrc.yml
文件添加到上述配置。该脚本必须在包含您的父文件夹的文件夹中启动.eslintrc
。
一些答案假定您已经安装了“ eslint-plugin-jest”,但是无需执行此操作,只需在.eslintrc
文件中执行以下操作,然后添加:
"globals": {
"jest": true,
}
在您的.eslintignore文件中,添加以下值:
**/__tests__/
这应该忽略__tests__目录的所有实例及其子级。
文章标签:eslint , javascript , jestjs
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!