Стандартний стиль JavaScript не розпізнає Mocha


91

У мене є мокко файл тесту який виглядає так:

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

Коли я запускаю mochaз CLI, він успішно запускає тест.

Коли я запускаю standard(виконуваний файл для стандартного стилю JavaScript ), у мене виникають помилки у фреймворкових функціях Mocha:

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.

Який найчистіший спосіб змусити Standard не скаржитися на ці функції?

Відповіді:


144

Насправді, вам не потрібно перераховувати кожну окрему глобальну змінну у своєму package.json

Ви можете вказати середовища замість цього:

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

Джерело: офіційні документи конфігурації ESLint .


1
Хороше рішення. Хіба це не означає, що я можу зателефонувати itдо звичайного нетестового коду, і він пройде лінтування? Іншими словами. Чи можна обмежити його лише тестовими класами?
Ashley

3
Так, це проблема ... package.jsonналаштування є загальнодоступними для linter. Ви можете обійти це, надавши різні аргументи CLI для різних файлів: щось на зразок standard --env mocha test/**/jslint-тестів (не тестується), але IRL мені ніколи не потрібно було налаштовувати такі налаштування.
Krzysztof Kaczor

4
Якщо ви використовуєте жарт, ви також можете: "standard": {"env": ["jest"]}
palafox_e

Щоб додати до коментаря @palafox_e, ви можете дізнатись, які значення доступні, перейшовши за посиланням: github.com/sindresorhus/globals/blob/master/globals.json
Deyon Samuel Washington

Я використовую, jestале не знаю, чому працює лише мокко, а не жарт!
Developerium

149

Я вважаю за краще редагувати свій .eslintrcі додавати мокко в розділ env:

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

таким чином мій package.jsonфайл підтримується в чистоті, також плагін vscode для eslint це розуміє краще


6
Так, це повинна бути схвалена відповідь.
Реймонд Вачага,

4
Я також підтверджую той факт, що це має бути схваленою відповіддю.
Ezrqn Kemboi,

61

хоча конфігурація коментарів eslint чудово працює для одного файлу, я вважаю за краще використовувати конфігурацію стандарту, щоб робити це для своїх проектів. Напрpackage.json globals

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

50

для eslint використовуйте цей рядок на початку test_file.js

/* eslint-env mocha */

1
Я віддаю перевагу цьому рішенню!
Михайло Озерянський

6
Це не рішення, якщо вам доведеться додавати його для кожного тестового файлу
Peadar

38

Ви можете використовувати те саме рішення, що і для веб-працівників

/* 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

Як вказував Нік Томлін, вам просто потрібно оголосити глобальні.

Я використовую, щоб помістити це в командний рядок, оскільки у мене є різні глобальні тести для джерел або різних частин проекту.

Для тестів ми повинні використовувати

standard --global describe --global it test/

в іншому місці мого проекту я хочу розмістити код, який використовує jQuery, тому я використовую

standard --global $ src/client/

Бонусна порада

Якщо ви використовуєте vim із Syntastic, можливо, ви хочете додати до вашого .vimrc

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.