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?

urig
sumber

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 .

Krzysztof Kaczor
sumber
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

Developerium
sumber
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"
    ]
  }
}
Nick Tomlin
sumber
50

untuk eslint gunakan baris ini di awal test_file.js

/* eslint-env mocha */
Ryu_hayabusa
sumber
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)
    })
  })
})
Niklas Ingholt
sumber
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"
Gianluca Casati
sumber