2016-06-01 32 views
14

Nei miei test Chai spesso mi trovo a voler usare le loro asserzioni che sono qualcosa come .to.be.empty, .to.be.true ecc., Perché trovo che siano più pulite da leggere di .to.be.length(1) o .to.be.equal(true). Tuttavia, questo interrompe il mio linter (sto usando il linting predefinito di Airbnb).Bel modo di sbarazzarsi di espressioni non inutilizzate errore di linter con chai

Potrei usare la sintassi // disable-eslint-line, ma poi dovrei aggiungerlo a ogni singola riga che legge così e sembra tedioso.

Ho letto anche la libreria DirtyChai, ma questo mi richiederebbe di tornare indietro attraverso tutta la mia libreria di test aggiungendo parentesi a tutti loro che sembra qualcosa che non dovrei fare semplicemente per far passare il mio linter qualcosa che dovrebbe essere probabilmente OK in primo luogo.

Qualcuno sa un modo migliore per gestire questo rispetto ai modi che ho delineato sopra?

risposta

19

Ci sono un paio di soluzioni/approcci che puoi adottare. Si potrebbe semplicemente disattivare la regola per l'intero file usando eslint-disable nella parte superiore del file in questione:

/* eslint-disable no-unused-expressions */ 
expect(someTrueValue).to.be.true; 

Tuttavia, l'aggiunta di questa nella parte superiore di ogni file di test può anche essere noioso. Un'altra opzione è disabilitare questa regola per tutti i file in una cartella specifica (questo consente anche di disabilitare altre regole che sono comunemente disabilitate ma diventano problematiche durante i test, come no-underscore-dangle quando si utilizza rewire).

È possibile farlo mettendo uno .eslintcconfiguration file nella stessa directory dei file di test, configurato per disabilitare tale regola. Ciò consente di utilizzare la configurazione predefinita per tutte le altre regole ignorando quella regola specificamente solo sui file in quella cartella. ESLint chiama questo Configuration Cascading.

+0

Questa è una caratteristica davvero cool (la cascata di configurazione) non sapevo di eslint grazie!Non è la soluzione perfetta per quello che mi piacerebbe, perché mi piacerebbe che si preoccupasse solo di quei casi d'uso specifici, ma è sufficiente per quello che sto cercando di fare. –

5

Ho creato un piccolo plugin chiamato eslint-plugin-chai-friendly che sovrascrive la regola predefinita no-unused-expressions e lo rende amichevole nei confronti del chai. La regola modificata ignora le istruzioni expect e should mantenendo il comportamento predefinito per tutto il resto.

+0

+1. Questa dovrebbe essere la risposta accettata perché significa che non è necessario disattivare la regola per l'intero file di test (in modo da ottenere comunque i vantaggi della regola quando si applica). Grazie per il plugin! –

7

appena trovato un'altra opzione utilizzando Relative Glob Patterns:

Nel file .eslintrc:

overrides: [ 
    { 
     files: "*.test.js", 
     rules: { 
      "no-unused-expressions": "off" 
     } 
    } 
] 
0

Nel caso qualcuno sta inciampando su questo oggi, ho avuto lo stesso problema e ho trovato questa soluzione su eslint documentation. Nel file di configurazione eslint, è possibile specificare uno o più ambienti, che predefiniranno le variabili globali per questo ambiente. Per noi, sarebbe mocha, e che ci si configura come questo nel tuo .eslintrc.json:

{ 
    "env": { 
     "mocha": true 
    }, 
    ... 
    ... 
    ... 
} 

Di conseguenza, rimuoverà tutto falso positivo su moka describe, it, beforeEach, ecc senza bisogno di disabilitare completamente eslint o disabilitare completamente qualsiasi regola specifica.

Testato con ESLint v.4.11 e moka 5,0

Problemi correlati