javascript - customize - Cómo usar ESLint con Jest
javascript standard code (9)
Estoy tratando de usar el linter ESLint con el marco de prueba de Jest.
Las pruebas de Jest se ejecutan con algunas variables globales como
jest
, sobre las cuales tendré que contarle al linter;
pero lo complicado es la estructura del directorio, con Jest las pruebas están incrustadas con el código fuente en
__tests__
carpetas
__tests__
, 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 agregar un archivo
.eslintrc
allí para agregar los globales ... pero ciertamente no quiero agregar un archivo
.eslintrc
a cada único directorio
__test__
.
Por ahora, acabo de agregar los globales de prueba al archivo global
.eslintrc
, pero dado que eso significa que ahora podría hacer referencia a
jest
en el código que no es de prueba, esa no parece ser la solución "correcta".
¿Hay alguna manera de obtener eslint para aplicar reglas basadas en algún patrón basado en el nombre del directorio, o algo así?
Agregar entorno solo para la carpeta
__tests__
Puede agregar un archivo
.eslintrc.yml
en sus carpetas
__tests__
, que extiende su configuración básica:
extends: <relative_path to .eslintrc>
env:
jest: true
Si solo tiene una carpeta
__tests__
, esta solución es la mejor, ya que abarca el entorno jest solo donde es necesario.
Tratar con muchas carpetas de prueba
Si tiene más carpetas de prueba (caso de OP), aún sugeriría agregar esos archivos. Y si tiene toneladas de esas carpetas, puede agregarlas con un simple script 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
Este script buscará las carpetas
__tests__
y agregará un archivo
.eslintrc.yml
con la configuración que se muestra arriba.
Este script debe iniciarse dentro de la carpeta que contiene su
.eslintrc
principal.
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!) Para la limitación "extender en anulaciones" de eslint config:
overrides: [
Object.assign(
{
files: [ ''**/*.test.js'' ],
env: { jest: true },
plugins: [ ''jest'' ],
},
require(''eslint-plugin-jest'').configs.recommended
)
]
De https://github.com/eslint/eslint/issues/8813#issuecomment-320448724
En su archivo .eslintignore agregue el siguiente valor:
**/__tests__/
Esto debería ignorar todas las instancias del directorio __tests__ y sus hijos.
Las configuraciones basadas en patrones están programadas para la versión 2.0.0 de ESLint. Por ahora, sin embargo, tendrá que crear dos tareas separadas (como se menciona en los comentarios). Uno para pruebas y otro para el resto del código y ejecutar ambos, al tiempo que proporciona diferentes archivos .eslintrc.
PD: En la próxima versión de ESLint se lanzará un entorno de broma, registrará todos los globales necesarios.
Para completar la respuesta de Zachary, aquí hay una solución 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
)
]
De https://github.com/eslint/eslint/issues/8813#issuecomment-320448724
Resolví el problema REF
yarn add
eslint-plugin-jest
y configure su archivo
.eslintrc
{
"extends": ["airbnb","plugin:jest/recommended"],
}
También puede configurar el entorno de prueba en su archivo de prueba de la siguiente manera:
/* eslint-env jest */
describe(() => {
/* ... */
})
algunas de las respuestas suponen que tiene instalado ''eslint-plugin-jest'', sin embargo, sin necesidad de hacerlo, simplemente puede hacerlo en su archivo
.eslintrc
, agregue:
"globals": {
"jest": true,
}
Los documentos muestran que ahora puede agregar:
"env": {
"jest": true
}
A su
.eslintrc
que agregará todas las cosas relacionadas con
.eslintrc
a su entorno, eliminando los errores / advertencias de linter.
¡Espero que ayude!