Gaya Standar JavaScript tidak mengenali Mocha


91

Saya memiliki file uji Mocha yang terlihat seperti ini:

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

Saat saya menjalankan mochadari CLI, pengujian berhasil dijalankan.

Ketika saya menjalankan standard(dapat dieksekusi untuk Gaya Standar JavaScript ) saya mendapatkan kesalahan pada fungsi kerangka kerja Mocha seperti:

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.

Apa cara terbersih agar Standard tidak mengeluh tentang fungsi-fungsi ini?

Jawaban:


144

Sebenarnya, Anda tidak perlu mencantumkan setiap variabel global di package.json Anda

Anda dapat menentukan lingkungan sebagai gantinya:

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

Sumber: Dokumen konfigurasi ESLint resmi .


1
Solusi yang bagus. Bukankah itu berarti saya dapat memanggil itkode non-tes biasa dan akan lolos linting? Dengan kata lain. Bisakah itu dibatasi hanya untuk kelas uji?
Ashley

3
Ya, itulah masalahnya ... package.jsonpengaturan 'global' untuk linter. Anda dapat melewati itu dengan memberikan argumen CLI yang berbeda untuk file yang berbeda: seperti standard --env mocha test/**/jsuntuk tes lint (tidak diuji), tetapi IRL saya tidak pernah perlu mengubah pengaturan seperti ini.
Krzysztof Kaczor

4
Jika menggunakan lelucon, Anda juga dapat: "standard": {"env": ["jest"]}
palafox_e

Untuk menambah komentar oleh @palafoxe, Anda dapat mengetahui nilai mana yang tersedia dengan membuka
Deyon Samuel Washington

Saya menggunakan jesttetapi saya tidak tahu mengapa hanya berfungsi untuk moka dan bukan bercanda!
Developerium

149

Saya lebih suka mengedit bagian saya .eslintrcdan menambahkan mocha ke env:

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

dengan cara ini package.jsonfile saya tetap bersih, juga plugin vscode untuk eslint lebih memahaminya


6
Ya, ini harus menjadi jawaban yang disetujui.
Raymond Wachaga

4
Saya juga mendukung fakta bahwa ini harus menjadi jawaban yang disetujui.
Ezrqn Kemboi

61

sementara konfigurasi komentar eslint berfungsi dengan baik untuk satu file, saya lebih suka menggunakan konfigurasi standar untuk melakukan ini untuk proyek saya. Misalnyapackage.json globals

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

50

untuk eslint gunakan baris ini di awal test_file.js

/* eslint-env mocha */

1
Saya lebih suka solusi ini!
Michael Ozeryansky

6
Itu bukan solusi jika Anda harus menambahkannya untuk setiap file pengujian
Peadar

38

Anda dapat menggunakan solusi yang sama seperti untuk pekerja web

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

Seperti yang ditunjukkan oleh Nick Tomlin, Anda hanya perlu mendeklarasikan global.

Saya gunakan untuk meletakkannya di baris perintah, karena saya memiliki global yang berbeda untuk pengujian seperti untuk sumber atau bagian proyek yang berbeda.

Untuk tes kita harus menggunakan

standard --global describe --global it test/

di tempat lain dalam proyek saya, saya ingin kode lint yang menggunakan jQuery jadi saya gunakan

standard --global $ src/client/

Tip bonus

Jika Anda menggunakan vim dengan Syntastic, Anda mungkin ingin menambahkan .vimrc Anda

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.