O estilo padrão do JavaScript não reconhece Mocha


94

Eu tenho um arquivo de teste Mocha parecido com este:

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

Quando executo a mochapartir da CLI, o teste é executado com sucesso.

Quando eu executo standard(o executável para JavaScript Standard Style ), recebo erros nas funções do framework do Mocha como:

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.

Qual é a maneira mais limpa de fazer o Standard não reclamar dessas funções?

Respostas:


147

Na verdade, você não precisa listar todas as variáveis ​​globais em seu package.json

Você pode especificar ambientes como este:

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

Fonte: Documentos oficiais de configuração ESLint .


1
Boa solução. Isso não significa que posso chamar itum código normal que não seja de teste e ele será aprovado no lint? Em outras palavras. Pode ser restrito apenas a aulas de teste?
Ashley

3
Sim, esse é o problema ... as package.jsonconfigurações são "globais" para o linter. Você pode contorná-lo fornecendo diferentes argumentos CLI para arquivos diferentes: algo como standard --env mocha test/**/jspara testes de lint (não testado), mas IRL - nunca precisei ajustar configurações como essa.
Krzysztof Kaczor

4
Se estiver usando jest, você também pode: "standard": {"env": ["jest"]}
palafox_e

Para adicionar ao comentário de @palafox_e, você pode descobrir quais valores estão disponíveis navegando para: github.com/sindresorhus/globals/blob/master/globals.json
Wil Moore III

Estou usando jestmas não sei porque só funciona para mocha e não para brincadeira!
Developerium

156

Prefiro editar meu .eslintrce adicionar mocha à seção env:

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

desta forma meu package.jsonarquivo é mantido limpo, também o plugin vscode para eslint o entende melhor


6
Sim, esta deve ser a resposta aprovada.
Raymond Wachaga de

4
Também apoio o fato de que esta deve ser a resposta aprovada.
Ezrqn Kemboi

62

embora a configuração de comentários do eslint funcione muito bem para um único arquivo, prefiro usar a configuração padrão para fazer isso em meus projetos. Por exemplopackage.json globals

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

51

para eslint use esta linha no início de test_file.js

/* eslint-env mocha */

1
Eu prefiro essa solução!
Michael Ozeryansky

6
Isso não é uma solução se você tiver que adicioná-lo para cada arquivo de teste
Peadar

39

Você pode usar a mesma solução para 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)
    })
  })
})

2

Conforme apontado por Nick Tomlin, você só precisa declarar globais.

Costumo colocá-lo na linha de comando, pois tenho diferentes globais para testes como para fontes ou diferentes partes do projeto.

Para testes, devemos usar

standard --global describe --global it test/

em outro lugar no meu projeto, quero lint de código que usa jQuery, então eu uso

standard --global $ src/client/

Dica bônus

Se você estiver usando o vim com o Syntastic, talvez queira adicionar ao seu .vimrc

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.