JavaScript Standard Style does not recognize Mocha

2019-03-09 07:05发布

I have a Mocha test file that looks like this:

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)
    })
  })
})

When I run mocha from the CLI, it runs the test successfully.

When I run standard (the executable for JavaScript Standard Style) I get errors on Mocha's framework functions like so:

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.

What's the cleanest way to make Standard not complain about these functions?

6条回答
萌系小妹纸
2楼-- · 2019-03-09 07:09

Actually, you don't need to list every single global variable in your package.json

You can specify environments instead like this:

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

Source: Official ESLint configuration docs.

查看更多
时光不老,我们不散
3楼-- · 2019-03-09 07:19

while eslint's comment configuration works great for a single file, I prefer to use standard's package.json globals configuration to do this for my projects. E.g.

{
  "name": "my-package",
  "version": "1.0.0",
  "standard": {
    "globals": [
      "describe",
      "context",
      "before",
      "beforeEach",
      "after",
      "afterEach",
      "it",
      "expect"
    ]
  }
}
查看更多
一纸荒年 Trace。
4楼-- · 2019-03-09 07:19

As pointed out by Nick Tomlin you just need to declare globals.

I use to put it in the command line, since I have different globals for tests as for sources or different parts of the project.

For tests we should use

standard --global describe --global it test/

elsewhere in my project I want to lint code that uses jQuery so I use

standard --global $ src/client/

Bonus tip

If you are using vim with Syntastic you maybe want to add to your .vimrc

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
查看更多
Explosion°爆炸
5楼-- · 2019-03-09 07:28

I prefer to edit my .eslintrc and add mocha to env section:

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

this way my package.json file is kept clean, also vscode plugin for eslint understands it better

查看更多
The star\"
6楼-- · 2019-03-09 07:29

for eslint use this line on the beginning of test_file.js

/* eslint-env mocha */
查看更多
老娘就宠你
7楼-- · 2019-03-09 07:31

You can use the same solution as for 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)
    })
  })
})
查看更多
登录 后发表回答