JavaScript Standard Style non riconosce Mocha


94

Ho un file di test Mocha simile a questo:

var expect = require('chai').expect
var muting = require('../muting')

describe('muting', function () {
  describe('init()', function () {
    it('should inject an object into twitter', function () {
      var twitter = 'twitter'
      muting.init(twitter)
      expect(muting.twitter).to.equal(twitter)
    })
  })
})

Quando eseguo mochadalla CLI, esegue correttamente il test.

Quando eseguo standard(l'eseguibile per JavaScript Standard Style ) ottengo errori sulle funzioni del framework di Mocha in questo modo:

standard: Use JavaScript Standard Style (https://github.com/feross/standard)   
c:\..\test\index.js:5:0: 'describe' is not defined.  
c:\..\test\index.js:6:2: 'describe' is not defined.  
c:\..\test\index.js:7:4: 'it' is not defined.

Qual è il modo più pulito per fare in modo che Standard non si lamenti di queste funzioni?

Risposte:


147

In realtà, non è necessario elencare ogni singola variabile globale nel tuo package.json

Puoi specificare ambienti invece in questo modo:

"standard": {
  "env": [ "mocha" ]
}

Fonte: documenti ufficiali di configurazione ESLint .


1
Buona soluzione. Non significa che posso chiamare un itnormale codice non di prova e supererà il linting? In altre parole. Può essere limitato solo alle classi di prova?
Ashley

3
Sì, questo è il problema ... le package.jsonimpostazioni sono "globali" per linter. Puoi aggirarlo fornendo diversi argomenti CLI per diversi file: qualcosa come standard --env mocha test/**/jsper i test di lint (non testato), ma IRL non ho mai avuto bisogno di modificare impostazioni come questa.
Krzysztof Kaczor

4
Se usi jest, puoi anche: "standard": {"env": ["jest"]}
palafox_e

Per aggiungere al commento di @palafox_e puoi scoprire quali valori sono disponibili navigando su: github.com/sindresorhus/globals/blob/master/globals.json
Wil Moore III

Lo sto usando jestma non so perchè funziona solo per moka e non per scherzo!
Developerium

156

Preferisco modificare il mio .eslintrce aggiungere mocha alla sezione env:

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

in questo modo il mio package.jsonfile viene mantenuto pulito, anche il plugin vscode per eslint lo capisce meglio


6
Sì, questa dovrebbe essere la risposta approvata.
Raymond Wachaga

4
Condivido anche il fatto che questa dovrebbe essere la risposta approvata.
Ezrqn Kemboi

62

mentre la configurazione dei commenti di eslint funziona alla grande per un singolo file, preferisco usare la configurazione standard per farlo per i miei progetti. Per esempiopackage.json globals

{
  "name": "my-package",
  "version": "1.0.0",
  "standard": {
    "globals": [
      "describe",
      "context",
      "before",
      "beforeEach",
      "after",
      "afterEach",
      "it",
      "expect"
    ]
  }
}


39

Puoi utilizzare la stessa soluzione dei web worker

/* global describe it */
var expect = require('chai').expect
var muting = require('../muting')

describe('muting', function () {
  describe('init()', function () {
    it('should inject an object into twitter', function () {
     var twitter = 'twitter'
     muting.init(twitter)
     expect(muting.twitter).to.equal(twitter)
    })
  })
})

2

Come sottolineato da Nick Tomlin, devi solo dichiarare globali.

Io lo metto nella riga di comando, poiché ho diversi globali per i test come per i sorgenti o diverse parti del progetto.

Per i test dovremmo usare

standard --global describe --global it test/

altrove nel mio progetto voglio lintare il codice che usa jQuery, quindi uso

standard --global $ src/client/

Suggerimento bonus

Se stai usando vim con Syntastic potresti voler aggiungere al tuo .vimrc

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.