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
时,它会成功运行测试。
当我运行 standard
(javascript 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) 发送