JavaScript标准样式无法识别Mocha

uri*_*rig 65 javascript mocha.js

我有一个看起来像这样的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)
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

当我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.
Run Code Online (Sandbox Code Playgroud)

什么是使标准不抱怨这些功能最干净的方法?

Krz*_*zor 113

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

你可以像这样指定环境:

"standard": {
  "env": [ "mocha" ]
}
Run Code Online (Sandbox Code Playgroud)

来源:官方ESLint配置文档.

  • 是的,这就是问题......`package.json`设置对于linter来说是'全局的'.您可以通过为不同的文件提供不同的CLI参数来绕过它:类似于标准--env mocha test/**/js`用于lint-tests(未经测试),但IRL我从来不需要调整这样的设置. (3认同)
  • 很好的解决方案。这不是意味着我可以在常规的非测试代码中调用 `it` 并且它会通过 linting 吗?换句话说。可以仅限于测试类吗? (2认同)
  • 如果使用笑话,还可以:“ standard”:{“ env”:[“ jest”]} (2认同)

Dev*_*ium 94

我更喜欢编辑我的.eslintrc并将mocha添加到env部分:

...
"env": {
  "commonjs": true,
  "node": true,
  "mocha": true
},
...
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,这应该是批准的答案。 (11认同)
  • 我还同意这应该是经过批准的答案这一事实。 (5认同)

Nic*_*lin 58

虽然eslint的注释配置适用于单个文件,但我更喜欢使用标准配置来为我的项目执行此操作.例如package.json globals

{
  "name": "my-package",
  "version": "1.0.0",
  "standard": {
    "globals": [
      "describe",
      "context",
      "before",
      "beforeEach",
      "after",
      "afterEach",
      "it",
      "expect"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)


Ryu*_*usa 44

对于eslint,在test_file.js的开头使用这一行

/* eslint-env mocha */
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这个解决方案! (3认同)
  • 如果必须为每个测试文件添加它,那不是解决方案 (2认同)

Nik*_*olt 38

您可以使用与Web worker相同的解决方案

/* 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)
    })
  })
})
Run Code Online (Sandbox Code Playgroud)