JavaScript标准样式无法识别摩卡


91

我有一个看起来像这样的Mocha测试文件:

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运行时,它将成功运行测试。

当我运行standardJavaScript Standard Style的可执行文件)时,我在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不抱怨这些功能的最干净方法是什么?

Answers:


144

实际上,您不需要在package.json中列出每个全局变量

您可以这样指定环境:

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

来源:ESLint官方配置文档


1
好的解决方案。那不是意味着我可以调用it常规的非测试代码,它将通过掉毛吗?换一种说法。可以仅限于测试班吗?
Ashley

3
是的,这就是问题所在。package.json对于linter,设置是“全局”的。您可以通过为不同的文件提供不同的CLI参数来绕过它:类似于standard --env mocha test/**/jslint-tests(未测试),但是IRL我从不需要调整这样的设置。
Krzysztof Kaczor

4
如果使用笑话,您还可以:“ standard”:{“ env”:[“ jest”]}
palafox_e

要在@palafox_e中添加评论,您可以通过导航到以下网址
Deyon Samuel Washington

我正在使用,jest但我不知道为什么仅适用于摩卡咖啡而不是开玩笑!
Developerium

147

我更喜欢编辑我的.eslintrc摩卡咖啡并将其添加到env部分:

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

这样我的package.json文件就可以保持干净,eslint的vscode插件也可以更好地理解它


6
是的,这应该是批准的答案。
Raymond Wachaga

4
我还同意以下事实:这应该是已批准的答案。
Ezrqn Kemboi

61

尽管eslint的注释配置非常适合单个文件,但我更喜欢使用standard的配置来完成我的项目。例如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
我更喜欢这种解决方案!
Michael Ozeryansky '18

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

正如Nick Tomlin指出的那样,您只需要声明全局变量即可。

我习惯将其放在命令行中,因为测试的全局变量和项目的源或不同部分都有不同的全局变量。

对于测试,我们应该使用

standard --global describe --global it test/

在我项目的其他地方,我想整理使用jQuery的代码,所以我使用

standard --global $ src/client/

奖金小费

如果在Syntastic上使用vim,则可能要添加到.vimrc中

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.