Dans mes tests Chai, je souhaite souvent utiliser leurs assertions qui ressemblent à .to.be.empty
, .to.be.true
etc., parce que je les trouve plus propres à lire que .to.be.length(1)
ou .to.be.equal(true)
. Cependant, cela brise mon linter (j’utilise le linteau Airbnb par défaut).
Je pourrais utiliser la syntaxe // disable-eslint-line
, mais je devrais ensuite l'ajouter à chaque ligne qui se lit ainsi et qui semble fastidieuse.
J'ai également lu des informations sur la bibliothèque DirtyChai , mais cela nécessiterait que je retourne à toute ma bibliothèque de tests en ajoutant des crochets, ce qui semble être quelque chose que je ne devrais pas avoir à faire simplement pour que mon linter soit adopté quelque chose, il devrait probablement être OK avec en premier lieu.
Est-ce que quelqu'un connaît une façon plus agréable de gérer cela que les manières que j'ai décrites ci-dessus?
Il y a plusieurs solutions/approches que vous pouvez prendre. Vous pouvez simplement désactiver la règle pour le fichier entier en utilisant eslint-disable
en haut du fichier en question:
/* eslint-disable no-unused-expressions */
expect(someTrueValue).to.be.true;
Cependant, l'ajouter en haut de chaque fichier de test peut également s'avérer fastidieux. Une autre option consiste à désactiver cette règle pour tous les fichiers d'un dossier spécifique (cela vous permet également de désactiver d'autres règles généralement désactivées mais qui deviennent difficiles à tester, telles que no-underscore-dangle
lorsque vous utilisez rewire
).
Vous pouvez le faire en plaçant un .eslintc
fichier de configuration dans le même répertoire que vos fichiers de test, configurés pour désactiver cette règle. Cela vous permet d'utiliser la configuration par défaut pour toutes les autres règles tout en ignorant cette règle, uniquement sur les fichiers de ce dossier. ESLint appelle ceci Configuration Cascading
.
Je viens de trouver une autre option en utilisant Relative Glob Patterns :
Dans votre fichier .eslintrc
:
overrides: [
{
files: "*.test.js",
rules: {
"no-unused-expressions": "off"
}
}
]
J'ai créé un petit plugin appelé eslint-plugin-chai-friendly
qui remplace la règle par défaut no-unused-expressions
et le rend convivial pour chai. La règle modifiée ignore les instructions expect
et should
tout en conservant le comportement par défaut pour tout le reste.
La combinaison de la réponse de jonalvarezz avec de la réponse de Ihor Diachenko m'a donné exactement ce que je voulais:
npm install --save-dev eslint-plugin-chai-friendly
// .eslintrc.js
module.exports = {
// ...
plugins: ['chai-friendly'],
overrides: [{
files: '*.test.js',
rules: {
'no-unused-expressions': 'off',
'chai-friendly/no-unused-expressions': 'error',
},
}],
// ...
}
De cette façon, la règle no-unused-expression
ne sera remplacée que par les fichiers *.test.js
AND Une règle no-unused-expression
sera toujours en place pour intercepter toutes les expressions inutilisées dans les fichiers de test non liées à chai
.
Au cas où quelqu'un tomberait sur cela aujourd'hui, j'avais le même problème et j'ai trouvé cette solution sur eslint documentation . Dans votre fichier de configuration eslint, vous pouvez spécifier un ou plusieurs environnements, qui prédéfiniront des variables globales pour cet environnement. Pour nous, ce serait mocha
, et vous configureriez ceci dans votre .eslintrc.json
:
{
"env": {
"mocha": true
},
...
...
...
}
En conséquence, tous les faux positifs concernant mocha describe
, it
, beforeEach
, etc., seront supprimés sans qu'il soit nécessaire de désactiver complètement eslint ou de désactiver une règle spécifique.
Testé avec ESLint v.4.11 et mocha 5.0