Styl standardowy JavaScript nie rozpoznaje języka Mocha

91

Mam plik testowy Mocha , który wygląda następująco:

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

Kiedy uruchamiam mochaz CLI, pomyślnie uruchamia test.

Kiedy uruchamiam standard(plik wykonywalny JavaScript Standard Style ), otrzymuję błędy w funkcjach frameworka Mocha, takie jak:

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.

Jaki jest najczystszy sposób, aby Standard nie narzekał na te funkcje?

urig
źródło

Odpowiedzi:

144

W rzeczywistości nie musisz wymieniać wszystkich zmiennych globalnych w swoim pliku package.json

Zamiast tego możesz określić środowiska w następujący sposób:

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

Źródło: oficjalna dokumentacja konfiguracyjna ESLint .

Krzysztof Kaczor
źródło
1
Dobre rozwiązanie. Czy to nie znaczy, że mogę wywoływać itzwykły kod niebadający w testach, a on przejdzie linting? Innymi słowy. Czy można to ograniczyć tylko do klas testowych?
Ashley,
3
Tak, w tym problem ... package.jsonustawienia są „globalne” dla lintera. Możesz to ominąć, podając różne argumenty CLI dla różnych plików: coś jak standard --env mocha test/**/jsdla testów linta (nie testowane), ale IRL nigdy nie musiałem dostosowywać takich ustawień.
Krzysztof Kaczor
4
Jeśli używasz żartu, możesz również: "standard": {"env": ["jest"]}
palafox_e
Aby dodać do komentarza @palafox_e, możesz dowiedzieć się, jakie wartości są dostępne, przechodząc do: github.com/sindresorhus/globals/blob/master/globals.json
Deyon Samuel Washington
Używam, jestale nie wiem, dlaczego działa tylko na mokkę, a nie na żart!
Developerium
147

Wolę edytować .eslintrci dodawać mokkę do sekcji env:

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

w ten sposób mój package.jsonplik jest czysty, a wtyczka vscode dla eslint lepiej to rozumie

Developerium
źródło
6
Tak, to powinna być zatwierdzona odpowiedź.
Raymond Wachaga
4
Popieram również fakt, że powinna to być zatwierdzona odpowiedź.
Ezrqn Kemboi
61

podczas gdy konfiguracja komentarzy w eslint działa świetnie dla pojedynczego pliku, wolę używać konfiguracji standardowej, aby robić to w moich projektach. Na przykładpackage.json globals

{
  "name": "my-package",
  "version": "1.0.0",
  "standard": {
    "globals": [
      "describe",
      "context",
      "before",
      "beforeEach",
      "after",
      "afterEach",
      "it",
      "expect"
    ]
  }
}
Nick Tomlin
źródło
50

dla eslint użyj tej linii na początku pliku test_file.js

/* eslint-env mocha */
Ryu_hayabusa
źródło
1
Wolę to rozwiązanie!
Michael Ozeryansky
6
To nie jest rozwiązanie, jeśli musisz dodać go do każdego pliku testowego
Peadar
38

Możesz użyć tego samego rozwiązania, co w przypadku pracowników internetowych

/* 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
źródło
2

Jak zauważył Nick Tomlin , wystarczy zadeklarować globalne.

Używam, aby umieścić go w linii poleceń, ponieważ mam różne globale do testów, jak dla źródeł lub różnych części projektu.

Do testów powinniśmy użyć

standard --global describe --global it test/

gdzie indziej w moim projekcie chcę lintować kod, który używa jQuery, więc używam

standard --global $ src/client/

Wskazówka bonusowa

Jeśli używasz vima z Syntastic, być może zechcesz go dodać do swojego .vimrc

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
Gianluca Casati
źródło