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.