JavaScript标准样式不识别Mocha

JavaScript标准样式不识别Mocha,javascript,mocha.js,Javascript,Mocha.js,我有一个如下所示的测试文件: 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'

我有一个如下所示的测试文件:

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)
    })
  })
})
"standard": {
  "env": [ "mocha" ]
}
当我从CLI运行
mocha
时,它会成功运行测试

当我运行
standard
(的可执行文件)时,我会在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.

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

您可以使用与标准版相同的解决方案


虽然eslint的注释配置对于单个文件非常有效,但我更喜欢使用standard的
globals
配置来为我的项目执行此操作。例如

{
  "name": "my-package",
  "version": "1.0.0",
  "standard": {
    "globals": [
      "describe",
      "context",
      "before",
      "beforeEach",
      "after",
      "afterEach",
      "it",
      "expect"
    ]
  }
}
正如前面所指出的,您只需要声明globals

我通常把它放在命令行中,因为我有不同的全局变量用于测试源或项目的不同部分

对于测试,我们应该使用

standard --global describe --global it test/
在我的项目中的其他地方,我想lint使用jQuery的代码,所以我使用

standard --global $ src/client/
奖金小费 如果您将vim与Syntastic一起使用,您可能希望将其添加到.vimrc中


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

您可以这样指定环境:

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)
    })
  })
})
"standard": {
  "env": [ "mocha" ]
}

来源:.

对于eslint,请在test_file.js的开头使用此行

/* eslint-env mocha */

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

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

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

这是一个很好的解决方案。这难道不意味着我可以在常规的非测试代码中调用
it
,它将通过linting吗?换句话说。它可以只限于测试类吗?是的,这就是问题所在
package.json
设置是linter的“全局”设置。您可以通过为不同的文件提供不同的CLI参数来绕过它:类似于为lint测试(未测试)提供的
standard--env mocha test/**/js
,但IRL i从未需要这样调整设置。如果使用jest,您还可以:“standard”:{“env”:[“jest”]}要添加到@palafox_e的评论中,您可以通过导航到找到可用的值:我正在使用
jest
,但我不知道为什么只适用于摩卡而不适用于jest!我更喜欢这个解决方案!如果必须为每个测试添加它,那么这不是一个解决方案file@Peadar创建多个
.eslintrc.json
也不是很漂亮,因为您不想在测试中添加一行。另一方面,创建另一个
.eslintrc.json
是有意义的,如果你需要更多的mocha配置,例如一个额外的插件。目前为止唯一有效的解决方案是,这应该是批准的答案。我也支持这一事实,即这应该是批准的答案。