J'essaie d'utiliser le linter ESLint avec le framework de test Jest.
Les tests de plaisanterie fonctionnent avec des globaux comme jest
, sur lesquels je devrai parler au linter; mais la difficulté réside dans la structure des répertoires. Avec Jest, les tests sont intégrés au code source dans les dossiers __tests__
. La structure des répertoires ressemble donc à:
src
foo
foo.js
__tests__
fooTest.js
bar
bar.js
__tests__
barTest.js
Normalement, j'aurais tous mes tests sous un seul répertoire, et je pourrais simplement ajouter un fichier .eslintrc
pour ajouter les globals ... mais je ne souhaite certainement pas ajouter un fichier .eslintrc
à chacun des __test__
dir.
Pour l'instant, je viens d'ajouter les paramètres globaux de test au fichier global .eslintrc
, mais puisque cela signifie que je peux maintenant faire référence à jest
dans du code non-test, cela ne semble pas être le "droit" Solution.
Existe-t-il un moyen de demander à eslint d’appliquer des règles basées sur un modèle basé sur le nom du répertoire, ou quelque chose du genre?
Les docs montrent que vous pouvez maintenant ajouter:
"env": {
"jest": true
}
À votre .eslintrc
qui ajoutera toutes les choses liées à votre environnement, éliminant les erreurs/avertissements de linter.
J'espère que ça t'as aidé!
ESLint prend en charge cette version à partir de la version> = 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"
}
}
],
};
Voici une solution de contournement (tirée d'une autre réponse ici, votez!) Pour la limitation "extension in overrides" de la configuration 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
Vous pouvez également définir l’env de test dans votre fichier de test comme suit:
/* eslint-env jest */
describe(() => {
/* ... */
})
Pour compléter la réponse de Zachary, voici une solution de contournement à la limitation "extension in overrides" de la configuration 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
Les configurations basées sur des modèles sont planifiées pour la version 2.0.0 d'ESLint. Pour l'instant, cependant, vous devrez créer deux tâches distinctes (comme indiqué dans les commentaires). Un pour les tests et un pour le reste du code et les exécuter, tout en fournissant différents fichiers .eslintrc.
P.S. Dans la prochaine version d'ESLint, il y aura un environnement plaisant qui enregistrera tous les globals nécessaires.
__tests__
Vous pouvez ajouter un fichier .eslintrc.yml
dans vos dossiers __tests__
, qui étend la configuration de base:
extends: <relative_path to .eslintrc>
env:
jest: true
Si vous ne possédez qu'un seul dossier __tests__
, cette solution est la meilleure, car elle ne couvre l'environnement que si elle est nécessaire.
Si vous avez plus de dossiers de test (cas OP), je suggérerais quand même d'ajouter ces fichiers. Et si vous avez des tonnes de ces dossiers, vous pouvez les ajouter avec 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
Ce script recherchera les dossiers __tests__
et ajoutera un fichier .eslintrc.yml
avec la configuration indiquée ci-dessus. Ce script doit être lancé dans le dossier contenant votre parent .eslintrc
.
certaines des réponses supposent que vous avez installé 'eslint-plugin-jest'. Cependant, sans avoir à le faire, vous pouvez simplement le faire dans votre fichier .eslintrc
, ajoutez:
"globals": {
"jest": true,
}
J'ai résolu le problème REF
ajouter le fil eslint-plugin-jest
et configurer votre .eslintrc
file
{
"extends": ["airbnb","plugin:jest/recommended"],
}