Le style standard JavaScript ne reconnaît pas le moka

91

J'ai un fichier de test Mocha qui ressemble à ceci:

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

Lorsque je cours à mochapartir de la CLI, il exécute le test avec succès.

Quand je lance standard(l'exécutable pour JavaScript Standard Style ), j'obtiens des erreurs sur les fonctions du framework de Mocha comme ceci:

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.

Quelle est la manière la plus propre de faire en sorte que Standard ne se plaigne pas de ces fonctions?

urig
la source

Réponses:

144

En fait, vous n'avez pas besoin de lister chaque variable globale dans votre package.json

Vous pouvez spécifier des environnements à la place comme ceci:

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

Source: documentation de configuration officielle d'ESLint .

Krzysztof Kaczor
la source
1
Bonne solution. Cela ne signifie-t-il pas que je peux appeler itdu code non-test régulier et qu'il passera le peluchage? En d'autres termes. Peut-il être limité uniquement aux classes de test?
Ashley
3
Ouais, c'est le problème ... les package.jsonparamètres sont «globaux» pour le linter. Vous pouvez le contourner en fournissant différents arguments CLI pour différents fichiers: quelque chose comme standard --env mocha test/**/jspour les tests de charpie (non testés), mais IRL je n'ai jamais eu besoin de modifier des paramètres comme celui-ci.
Krzysztof Kaczor
4
Si vous utilisez jest, vous pouvez également: "standard": {"env": ["jest"]}
palafox_e
Pour ajouter au commentaire de @palafox_e, vous pouvez découvrir quelles valeurs sont disponibles en accédant
Deyon Samuel Washington
J'utilise jestmais je ne sais pas pourquoi ne fonctionne que pour le moka et pas pour plaisanter!
Developerium
147

Je préfère modifier mon .eslintrcet ajouter du moka à la section env:

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

de cette façon, mon package.jsonfichier est maintenu propre, le plugin vscode pour eslint le comprend mieux

Developerium
la source
6
Oui, cela devrait être la réponse approuvée.
Raymond Wachaga
4
J'appuie également le fait que cela devrait être la réponse approuvée.
Ezrqn Kemboi
61

alors que la configuration des commentaires d'eslint fonctionne très bien pour un seul fichier, je préfère utiliser la configuration standard pour le faire pour mes projets. Par exemplepackage.json globals

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

pour eslint, utilisez cette ligne au début de test_file.js

/* eslint-env mocha */
Ryu_hayabusa
la source
1
Je préfère cette solution!
Michael Ozeryansky
6
Ce n'est pas une solution si vous devez l'ajouter pour chaque fichier de test
Peadar
38

Vous pouvez utiliser la même solution que pour les web workers

/* 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
la source
2

Comme l'a souligné Nick Tomlin, il vous suffit de déclarer les globaux.

J'utilise pour le mettre dans la ligne de commande, car j'ai différents globaux pour les tests comme pour les sources ou les différentes parties du projet.

Pour les tests, nous devrions utiliser

standard --global describe --global it test/

ailleurs dans mon projet, je veux lint du code qui utilise jQuery donc j'utilise

standard --global $ src/client/

Astuce bonus

Si vous utilisez vim avec Syntastic, vous voudrez peut-être ajouter à votre .vimrc

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