我正在尝试将ESLint linter与Jest测试框架一起使用。
Jest测试使用像jest
这样的全局变量运行,我需要告诉linter;但是棘手的是目录结构,使用Jest测试嵌入了__tests__
文件夹中的源代码,因此目录结构如下所示:
src
foo
foo.js
__tests__
fooTest.js
bar
bar.js
__tests__
barTest.js
通常,我在单个目录下进行所有测试,我可以在那里添加一个.eslintrc
文件来添加全局...但我当然不想添加{{1文件到每个.eslintrc
目录。
现在,我刚刚将测试全局变量添加到全局__test__
文件中,但由于这意味着我现在可以在非测试代码中引用.eslintrc
,这似乎不是“正确”的解决方案。
有没有办法让eslint根据某些基于目录名称的模式应用规则,或类似的东西?
答案 0 :(得分:434)
答案 1 :(得分:41)
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配置的“覆盖范围扩展”限制的解决方法(来自此处的另一个答案,投票!):
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
答案 2 :(得分:13)
您还可以如下在测试文件中设置测试环境:
/* eslint-env jest */
describe(() => {
/* ... */
})
答案 3 :(得分:10)
要完成Zachary的回答,这里有一个解决方法,用于"扩展覆盖" eslint config的限制:
plugins: [
require( 'karma-jasmine' ),
require( 'karma-chrome-launcher' ),
require( 'karma-phantomjs-launcher' ),
require( 'karma-remap-istanbul' ),
require( 'angular-cli/plugins/karma' )
],
browsers: [ 'PhantomJS', 'Chrome' ],
来自https://github.com/eslint/eslint/issues/8813#issuecomment-320448724
答案 4 :(得分:2)
基于模式的配置计划在ESLint的2.0.0版本中发布。但是,现在,您必须创建两个单独的任务(如注释中所述)。一个用于测试,一个用于其余代码并运行它们,同时提供不同的.eslintrc文件。
P.S。 ESLint的下一个版本中会出现一个jest环境,它将注册所有必需的全局变量。
答案 5 :(得分:1)
__tests__
文件夹您可以在.eslintrc.yml
文件夹中添加__tests__
文件,以扩展您的基本配置:
extends: <relative_path to .eslintrc>
env:
jest: true
如果您只有一个__tests__
文件夹,那么这个解决方案是最好的,因为它只在需要的地方设置了jest环境。
如果你有更多的测试文件夹(OP案例),我仍然建议添加这些文件。如果您有大量的文件夹,可以使用简单的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
。
答案 6 :(得分:0)
某些答案假定您已安装“ eslint-plugin-jest”,但是无需这样做,只需在.eslintrc
文件中执行此操作,然后添加:
"globals": {
"jest": true,
}
答案 7 :(得分:0)
我解决了问题REF
纱线添加eslint-plugin-jest
并配置您的
.eslintrc
个文件
{
"extends": ["airbnb","plugin:jest/recommended"],
}
答案 8 :(得分:-5)
在.eslintignore文件中添加以下值:
**/__tests__/
这应该忽略__tests__目录及其子项的所有实例。