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?

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 .


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


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


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

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"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.