जावास्क्रिप्ट मानक शैली मोचा को नहीं पहचानती है


94

मेरे पास एक मोचा टेस्ट फाइल है जो इस तरह दिखती है:

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

जब मैं mochaसीएलआई से चलता हूं , तो यह सफलतापूर्वक परीक्षण करता है।

जब मैं दौड़ता हूं standard( जावास्क्रिप्ट मानक शैली के लिए निष्पादन योग्य ) तो मुझे मोचा के ढांचे के कार्यों पर त्रुटियां मिलती हैं:

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.

मानक इन कार्यों के बारे में शिकायत नहीं करने के लिए सबसे साफ तरीका क्या है?

जवाबों:


147

दरअसल, आपको अपने package.json में हर एक ग्लोबल वैरिएबल को सूचीबद्ध करने की आवश्यकता नहीं है

आप इस तरह से वातावरण निर्दिष्ट कर सकते हैं:

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

स्रोत: आधिकारिक ESLint कॉन्फ़िगरेशन डॉक्स


1
अच्छा समाधान। इसका मतलब यह नहीं है कि मैं itनियमित रूप से गैर-परीक्षण कोड में कॉल कर सकता हूं और यह लाइनिंग पास करेगा? दूसरे शब्दों में। क्या इसे केवल परीक्षण कक्षाओं तक ही सीमित रखा जा सकता है?
एशले

3
हाँ, यही समस्या है ... package.jsonसेटिंग्स लिंटर के लिए 'ग्लोबल' हैं। आप अलग-अलग फ़ाइलों के लिए अलग-अलग CLI तर्क प्रदान करके इसे बाईपास कर सकते हैं: standard --env mocha test/**/jsलिंट-टेस्ट (परीक्षण नहीं किया गया) के लिए कुछ पसंद है , लेकिन IRL को इस तरह की सेटिंग्स को मोड़ने की आवश्यकता नहीं थी।
क्रिज़ीस्तोफ़ काकज़ोर

4
यदि जैस्ट का उपयोग कर रहे हैं, तो आप यह भी कर सकते हैं: "मानक": {"env": ["जेस्ट"]}
palafox_e

@Palafox_e द्वारा टिप्पणी में जोड़ने के लिए आप पता लगा सकते हैं कि कौन से मूल्य नेविगेट करने के लिए उपलब्ध हैं: github.com/sindresorhus/globals/blob/master/globals.json
Wil मूर III

मैं उपयोग कर रहा हूँ, jestलेकिन मुझे नहीं पता कि केवल मोचा के लिए ही काम क्यों नहीं किया जाता है!
Developerium

156

मैं अपना संपादन करना चाहता हूं .eslintrcऔर env सेक्शन में मोचा जोड़ना चाहता हूं :

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

इस तरह से मेरी package.jsonफ़ाइल को साफ रखा जाता है, एस्केंट के लिए भी vscode प्लगइन इसे बेहतर समझता है


6
हां, यह स्वीकृत उत्तर होना चाहिए।
रेमंड वचागा

4
मैं इस तथ्य को भी दूसरा मानता हूं कि यह स्वीकृत उत्तर होना चाहिए।
एज्रकन केमबोई

62

जबकि एस्लिंट की टिप्पणी विन्यास एकल फ़ाइल के लिए बहुत अच्छा काम करता है, मैं अपनी परियोजनाओं के लिए ऐसा करने के लिए मानक विन्यास का उपयोग करना पसंद करता हूं। उदाहरण के लिएpackage.json globals

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

51

eslint के लिए इस लाइन का उपयोग test_file.js की शुरुआत में करें

/* eslint-env mocha */

1
मैं इस समाधान पसंद करते हैं!
माइकल ओजेरान्सकी

6
यदि आप इसे हर परीक्षण फ़ाइल के लिए जोड़ना चाहते हैं, तो कोई हल नहीं है
Peadar

39

आप वेब कर्मचारियों के लिए उसी समाधान का उपयोग कर सकते हैं

/* 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

जैसा कि निक टॉमलिन ने बताया कि आपको केवल ग्लोबल्स घोषित करने की आवश्यकता है।

मैं इसे कमांड लाइन में डालने के लिए उपयोग करता हूं, क्योंकि मेरे पास परीक्षण के लिए अलग ग्लोबल्स हैं जैसे कि स्रोतों या परियोजना के विभिन्न हिस्सों के लिए।

परीक्षणों के लिए हमें उपयोग करना चाहिए

standard --global describe --global it test/

मेरे प्रोजेक्ट में कहीं और मैं jint का उपयोग करने वाला कोड लिंट करना चाहता हूं इसलिए मैं उपयोग करता हूं

standard --global $ src/client/

बोनस टिप

यदि आप सिंथेटिक के साथ विम का उपयोग कर रहे हैं तो आप शायद अपने .vimrc में जोड़ना चाहते हैं

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.