web-dev-qa-db-fra.com

Belle façon de se débarrasser de l'erreur linter avec chai sans expressions non utilisées

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?

30
Ben Hare

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 .eslintcfichier 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 .

31
Nick Bartlett

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"
        }
    }
]
24
jonalvarezz

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.

13
Ihor Diachenko

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.

2
Scott Rudiger

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

0
Pierre-Adrien Buisson