JavaScript Standard Style erkennt Mokka nicht

91

Ich habe eine Mokka- Testdatei, die so aussieht:

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)
    })
  })
})

Wenn ich mochavon der CLI aus starte, wird der Test erfolgreich ausgeführt.

Wenn ich standard(die ausführbare Datei für JavaScript Standard Style ) ausführe, erhalte ich folgende Fehler bei den Mocha-Framework-Funktionen:

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.

Was ist der sauberste Weg, um Standard dazu zu bringen, sich nicht über diese Funktionen zu beschweren?

urig
quelle

Antworten:

144

Tatsächlich müssen Sie nicht jede einzelne globale Variable in Ihrer package.json auflisten

Sie können stattdessen Umgebungen wie folgt angeben:

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

Quelle: Offizielle ESLint-Konfigurationsdokumente .

Krzysztof Kaczor
quelle
1
Gute Lösung. Bedeutet das nicht, dass ich itregulären Nicht-Test-Code aufrufen kann und er das Flusen bestehen wird? Mit anderen Worten. Kann es nur auf Testklassen beschränkt werden?
Ashley
3
Ja, das ist das Problem ... package.jsonEinstellungen sind für Linter 'global'. Sie können es umgehen, indem Sie verschiedene CLI-Argumente für verschiedene Dateien angeben: so etwas wie standard --env mocha test/**/jsfür Flusentests (nicht getestet), aber IRL Ich musste solche Einstellungen nie anpassen.
Krzysztof Kaczor
4
Wenn Sie Scherz verwenden, können Sie auch: "Standard": {"env": ["Scherz"]}
palafox_e
Um den Kommentar von @palafox_e zu ​​ergänzen, können Sie herausfinden, welche Werte verfügbar sind, indem Sie zu github.com/sindresorhus/globals/blob/master/globals.json
Deyon Samuel Washington
Ich benutze, jestaber ich weiß nicht, warum nur für Mokka und nicht für Scherz funktioniert!
Developerium
146

Ich ziehe es vor, meine zu bearbeiten .eslintrcund Mokka zum env-Abschnitt hinzuzufügen:

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

Auf diese Weise wird meine package.jsonDatei sauber gehalten, auch das vscode-Plugin für eslint versteht es besser

Entwicklungskriterium
quelle
6
Ja, dies sollte die genehmigte Antwort sein.
Raymond Wachaga
4
Ich unterstütze auch die Tatsache, dass dies die genehmigte Antwort sein sollte.
Ezrqn Kemboi
1
Mit Scherz und es hat auch bei mir funktioniert.
Emmanuel Neni
61

Während die Kommentarkonfiguration von eslint für eine einzelne Datei hervorragend funktioniert, bevorzuge ich die Standardkonfiguration , um dies für meine Projekte zu tun. Z.Bpackage.json globals

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

Verwenden Sie für eslint diese Zeile am Anfang von test_file.js

/* eslint-env mocha */
Ryu_hayabusa
quelle
1
Ich bevorzuge diese Lösung!
Michael Ozeryansky
6
Das ist keine Lösung, wenn Sie es für jede Testdatei hinzufügen müssen
Peadar
38

Sie können dieselbe Lösung wie für Web-Worker verwenden

/* 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)
    })
  })
})
Niklas Ingholt
quelle
2

Wie Nick Tomlin betont hat, müssen Sie nur Globale deklarieren.

Ich benutze es, um es in die Befehlszeile zu setzen, da ich verschiedene Globals für Tests wie für Quellen oder verschiedene Teile des Projekts habe.

Für Tests sollten wir verwenden

standard --global describe --global it test/

An anderer Stelle in meinem Projekt möchte ich Code fusseln, der jQuery verwendet, also verwende ich

standard --global $ src/client/

Bonus-Tipp

Wenn Sie vim mit Syntastic verwenden, möchten Sie möglicherweise Ihre .vimrc hinzufügen

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
Gianluca Casati
quelle