Cómo usar ESLint con Jest
Estoy intentando utilizar el linter ESLint con el marco de prueba Jest.
Las pruebas de Jest se ejecutan con algunos globales como jest
, de los cuales tendré que informarle al linter; pero lo complicado es la estructura del directorio, con Jest las pruebas están integradas con el código fuente en __tests__
carpetas, por lo que la estructura del directorio se parece a:
src
foo
foo.js
__tests__
fooTest.js
bar
bar.js
__tests__
barTest.js
Normalmente, tendría todas mis pruebas en un solo directorio y podría simplemente agregar un .eslintrc
archivo allí para agregar los globales... pero ciertamente no quiero agregar un .eslintrc
archivo a cada __test__
directorio.
Por ahora, acabo de agregar los globales de prueba al .eslintrc
archivo global, pero como eso significa que ahora puedo hacer referencia jest
en código que no es de prueba, no parece ser la solución "correcta".
¿Hay alguna manera de hacer que eslint aplique reglas basadas en algún patrón basado en el nombre del directorio, o algo así?
Los documentos muestran que ahora puede agregar:
"env": {
"jest/globals": true
}
A .eslintrc
esto agregará todas las cosas relacionadas con bromas a su entorno, eliminando los errores/advertencias de linter.
Es posible que deba incluirlo plugins: ["jest"]
en su configuración electrónica y agregar el eslint-plugin-jest
complemento si aún no funciona.
ESLint admite esto a partir de la versión >= 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"
}
}
],
};
Aquí hay una solución alternativa (de otra respuesta aquí, ¡vote a favor!) para la limitación de "extender en anulaciones" de la configuración de eslint:
overrides: [
Object.assign(
{
files: [ '**/*.test.js' ],
env: { jest: true },
plugins: [ 'jest' ],
},
require('eslint-plugin-jest').configs.recommended
)
]
Desde https://github.com/eslint/eslint/issues/8813#issuecomment-320448724
También puede configurar el entorno de prueba en su archivo de prueba de la siguiente manera:
/* eslint-env jest */
describe(() => {
/* ... */
})
Para completar la respuesta de Zachary, aquí hay una solución alternativa para la limitación de "extender en anulaciones" de la configuración de eslint:
overrides: [
Object.assign(
{
files: [ '**/*.test.js' ],
env: { jest: true },
plugins: [ 'jest' ],
},
require('eslint-plugin-jest').configs.recommended
)
]
Desde https://github.com/eslint/eslint/issues/8813#issuecomment-320448724