JavaScript 标准样式无法识别 Mocha

Posted

技术标签:

【中文标题】JavaScript 标准样式无法识别 Mocha【英文标题】:JavaScript Standard Style does not recognize Mocha 【发布时间】:2015-07-13 03:19:50 【问题描述】:

我有一个如下所示的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 不抱怨这些功能的最干净的方法是什么?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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


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

【讨论】:

【参考方案3】:

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

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

对于我们应该使用的测试

standard --global describe --global it test/

在我的项目的其他地方,我想对使用 jQuery 的代码进行 lint,所以我使用

standard --global $ src/client/

额外提示

如果您使用带有 Syntastic 的 vim,您可能需要添加到您的 .vimrc

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"

【讨论】:

【参考方案4】:

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

您可以像这样指定环境:

"standard": 
  "env": [ "mocha" ]

来源:Official ESLint configuration docs。

【讨论】:

很好的解决方案。这是否意味着我可以在常规的非测试代码中调用 it 并且它会通过 linting?换一种说法。能不能仅限于测试类? 是的,这就是问题所在...package.json 设置对于 linter 来说是“全局的”。您可以通过为不同的文件提供不同的 CLI 参数来绕过它:类似于 standard --env mocha test/**/js 用于 lint-tests(未测试),但 IRL 我从来不需要像这样调整设置。 如果使用 jest,还可以: "standard": "env": [ "jest" ] 要添加到@palafox_e 的评论中,您可以通过导航到:github.com/sindresorhus/globals/blob/master/globals.json 找出可用的值 我正在使用jest,但我不知道为什么只适用于摩卡而不是开玩笑!【参考方案5】:

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

/* eslint-env mocha */

【讨论】:

我更喜欢这个解决方案! 如果您必须为每个测试文件添加它,那不是解决方案 @Peadar 创建多个.eslintrc.json 也不是很漂亮,只是因为您不想在测试中添加一行。另一方面,如果您需要的不仅仅是 mocha 的配置,例如额外的插件等,那么创建另一个 .eslintrc.json 是有意义的。【参考方案6】:

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

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

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

【讨论】:

是的,这应该是批准的答案。 我也赞同这应该是批准的答案。 standard 是否跟踪 .eslintrc

以上是关于JavaScript 标准样式无法识别 Mocha的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 WebPack.DefinePlugin 的全局注入变量进行 NodeJS Mocha 单元测试

如何检查请求是不是使用 JavaScript (Mocha) 发送

CSS样式无法识别数字[重复]

如何使用 Mocha 测试“正常”(非节点特定)JavaScript 函数?

Mocha 单元测试框架简介

javascript 使用mocha登录会话测试