【问题标题】:JavaScript Standard Style does not recognize MochaJavaScript 标准样式无法识别 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 不抱怨这些功能的最干净的方法是什么?

【问题讨论】:

    标签: javascript mocha.js


    【解决方案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
          猜你喜欢
          • 2018-02-16
          • 2016-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-13
          • 2018-03-08
          相关资源
          最近更新 更多