JavaScript Standart Stili Mocha'yı tanımıyor


91

Şuna benzeyen bir Mocha test dosyam var :

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

Ben çalıştırdığınızda mochaCLI'den, başarıyla test çalıştırır.

Çalıştırdığımda standard( JavaScript Standart Stili için yürütülebilir ) Mocha'nın çerçeve işlevlerinde aşağıdaki gibi hatalar alıyorum:

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'ın bu işlevlerden şikayet etmemesi için en temiz yol nedir?

Yanıtlar:


144

Aslında, paketinizdeki her bir global değişkeni listelemenize gerek yok. Json

Bunun yerine ortamları şu şekilde belirtebilirsiniz:

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

Kaynak: Resmi ESLint yapılandırma belgeleri .


1
Güzel çözüm. Bu it, normal test dışı kodu arayabileceğim ve linting'i geçeceği anlamına gelmiyor mu? Diğer bir deyişle. Yalnızca test sınıflarıyla sınırlandırılabilir mi?
Ashley

3
Evet, sorun bu ... package.jsonayarlar linter için 'genel'. Farklı dosyalar için farklı CLI argümanları sağlayarak bunu atlayabilirsiniz: standard --env mocha test/**/jstiftik testleri gibi bir şey (test edilmemiştir), ancak IRL hiçbir zaman böyle ayarları değiştirmeye ihtiyacım olmadı.
Krzysztof Kaczor

4
Jest kullanıyorsanız, şunları da yapabilirsiniz: "standard": {"env": ["jest"]}
palafox_e

@Palafox_e tarafından yapılan yoruma eklemek için, şu adrese giderek hangi değerlerin mevcut olduğunu öğrenebilirsiniz
Deyon Samuel Washington

Kullanıyorum jestama neden sadece mocha için çalışıyor, jest için değil!
Developerium

149

.eslintrcMocha'mı düzenlemeyi ve env bölümüne mocha eklemeyi tercih ediyorum :

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

bu şekilde package.jsondosyam temiz tutulur, ayrıca eslint için vscode eklentisi daha iyi anlar


6
Evet, bu onaylanmış cevap olmalıdır.
Raymond Wachaga

4
Bunun onaylanmış cevap olması gerektiği gerçeğini de ikinci kez düşünüyorum.
Ezrqn Kemboi

61

eslint'in yorum yapılandırması tek bir dosya için harika çalışırken, projelerim için bunu yapmak için standardın yapılandırmasını kullanmayı tercih ediyorum . Örneğinpackage.json globals

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

50

eslint için test_file.js'nin başında bu satırı kullanın

/* eslint-env mocha */

1
Bu çözümü tercih ederim!
Michael Ozeryansky

6
Her test dosyası için eklemeniz gerekiyorsa bu bir çözüm değil
Peadar

38

Web çalışanları ile aynı çözümü kullanabilirsiniz

/* 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'in işaret ettiği gibi, sadece küresel ilan etmeniz gerekiyor.

Bunu komut satırına koymak için kullanıyorum, çünkü testler için kaynaklar veya projenin farklı bölümleri için farklı globallerim var.

Testler için kullanmalıyız

standard --global describe --global it test/

projemin başka bir yerinde jQuery kullanan bir kod kullanmak istiyorum, bu yüzden kullanıyorum

standard --global $ src/client/

Bonus ipucu

Syntastic ile vim kullanıyorsanız, .vimrc dosyanıza eklemek isteyebilirsiniz.

let b:syntastic_checkers = ['standard']
let g:syntastic_javascript_standard_args = "--global $ --global it --global describe"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.