JavaScript 标准样式无法识别 Mocha

JavaScript Standard Style does not recognize Mocha

我有一个 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)
    })
  })
})

当我从 CLI 运行 mocha 时,它 运行 测试成功。

当我 运行 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 不抱怨这些功能的最干净的方法是什么?

您可以使用与 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)
    })
  })
})

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

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

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

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

对于测试我们应该使用

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"

实际上,您不需要在 package.json

中列出每个全局变量

您可以像这样指定环境:

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

来源:Official ESLint configuration docs.

对于 eslint,在 test_file.js

的开头使用这一行
/* eslint-env mocha */

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

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

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