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?

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 .


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


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

50

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

/* eslint-env mocha */

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

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"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.