JavaScript Standard Style ไม่รู้จัก Mocha


94

ฉันมีไฟล์ทดสอบ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)
    })
  })
})

เมื่อฉันเรียกใช้mochaจาก CLI มันจะรันการทดสอบสำเร็จ

เมื่อฉันเรียกใช้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 ไม่บ่นเกี่ยวกับฟังก์ชันเหล่านี้ได้อย่างสะอาดที่สุด

คำตอบ:


147

จริงๆแล้วคุณไม่จำเป็นต้องแสดงรายการตัวแปรส่วนกลางทั้งหมดใน package.json ของคุณ

คุณสามารถระบุสภาพแวดล้อมแทนดังนี้:

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

ที่มา: เอกสารการกำหนดค่า ESLint อย่างเป็นทางการ


1
ทางออกที่ดี. ไม่ได้หมายความว่าฉันสามารถโทรโดยitใช้รหัสปกติที่ไม่ใช่การทดสอบและมันจะผ่านการเป็นขุย? กล่าวอีกนัยหนึ่ง สามารถ จำกัด เฉพาะการทดสอบชั้นเรียนได้หรือไม่?
Ashley

3
ใช่นั่นคือปัญหา ... package.jsonการตั้งค่าเป็น 'ส่วนกลาง' สำหรับเศษกระดาษ คุณสามารถข้ามได้โดยระบุอาร์กิวเมนต์ CLI ที่แตกต่างกันสำหรับไฟล์ต่างๆเช่นstandard --env mocha test/**/jsสำหรับการทดสอบผ้าสำลี (ไม่ได้ทดสอบ) แต่ IRL ฉันไม่จำเป็นต้องปรับแต่งการตั้งค่าเช่นนี้
Krzysztof Kaczor

4
หากใช้ jest คุณยังสามารถ: "standard": {"env": ["jest"]}
palafox_e

หากต้องการเพิ่มความคิดเห็นโดย @palafox_e คุณสามารถดูว่ามีค่าใดบ้างโดยไปที่: github.com/sindresorhus/globals/blob/master/globals.json
Wil Moore III

ฉันใช้jestแต่ไม่รู้ว่าทำไมใช้ได้กับมอคค่าเท่านั้นไม่ใช่เรื่องตลก!
Developerium

156

ฉันต้องการแก้ไข.eslintrcและเพิ่มส่วน mocha ใน env:

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

ด้วยวิธีนี้package.jsonไฟล์ของฉันจะสะอาดอยู่เสมอนอกจากนี้ปลั๊กอิน vscode สำหรับ eslint ก็เข้าใจดีขึ้น


6
ใช่นี่ควรเป็นคำตอบที่ได้รับอนุมัติ
Raymond Wachaga

4
ฉันยังสองข้อเท็จจริงที่ว่านี่ควรเป็นคำตอบที่ได้รับอนุมัติ
Ezrqn Kemboi

62

แม้ว่าการกำหนดค่าความคิดเห็นของ eslint จะใช้งานได้ดีกับไฟล์เดียว แต่ฉันชอบใช้การกำหนดค่ามาตรฐานเพื่อทำสิ่งนี้สำหรับโครงการของฉัน เช่น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
ฉันชอบวิธีนี้มากกว่า!
Michael Ozeryansky

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

ตามที่Nick Tomlinชี้ไว้คุณเพียงแค่ต้องประกาศทั่วโลก

ฉันใช้เพื่อวางไว้ในบรรทัดคำสั่งเนื่องจากฉันมี globals ที่แตกต่างกันสำหรับการทดสอบสำหรับแหล่งที่มาหรือส่วนต่างๆของโครงการ

สำหรับการทดสอบเราควรใช้

standard --global describe --global it test/

ที่อื่นในโครงการของฉันฉันต้องการขุยโค้ดที่ใช้ jQuery ดังนั้นฉันจึงใช้

standard --global $ src/client/

เคล็ดลับโบนัส

หากคุณใช้ vim กับ Syntastic คุณอาจต้องการเพิ่มลงใน. vimrcของคุณ

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.