Mocha için test dizini nasıl belirtilir?


219

Mochatest varsayılan olarak test dosyalarını bulmaya çalışır , başka bir dizin nasıl belirlerim, örneğin server-test?


Sorunuza% 100 yanıt olmasa da, jaketrent.com/post/run-single-mocha-test adresine göz atın - Buraya belirli bir test paketini nasıl çalıştıracağınıza bakıyorum ve bu, hangi testleri kullanabileceğinizi .onlyve .skipkoşuyor. Tüm test paketinin her zaman çalışmasını beklemek istemediğinizde belirli bir özelliğin geliştirilmesi sırasında önemlidir.
Dave Sag

Yanıtlar:


141

Düzenle: Bu seçenek kullanımdan kaldırıldı: https://mochajs.org/#mochaopts


Hala mochakomut satırında çalışarak bunu yapmak istiyorsanız , ancak testleri ./server-testsbunun yerine bir klasörde çalıştırmak istiyorsanız ./test, dosyada ./test/mocha.optssadece bununla bir dosya oluşturun :

server-tests

Bu klasördeki ve alt dizinlerdeki her şeyi çalıştırmak istiyorsanız, bunu test/mocha.opts

server-tests
--recursive

mocha.opts komut satırı üzerinden iletilen bağımsız değişkenlerdir, bu nedenle ilk satırı yalnızca testleri değiştirmek istediğiniz dizine dönüştürmek, ./test/


12
Bu, en az sürtünmeli seçenek ve kabul edilen cevap olmalı IMHO
Nick Tomlin

Ben bir kazan plakası kullanıyorum ve aşağıdaki satırda, pencereler nedeniyle olabilir, lütfen bir kez kontrol edebilirsiniz. no. /node_modules/mocha/bin/mocha $ (api-adı '* -test.js' bulmak) --compilers js: babel-core / register
kobe

1
bir mücevher, ayrıca Webstorm IDE mocha hata ayıklama yapılandırmaları ile güzel oynuyor, sadece "dosya desenleri" seçin ve girişi boş bırakın ve mocha.opts kullanacak
danday74

3
Kesinlikle en iyi cevap bu. Büyük olasılıkla, cevabınızı mocha.optsdosyanın istediğiniz yere yerleştirilebileceğini ve daha sonra mochaörneğin yapılandırma dosyasına giden yolu belirterek yürütebilirsiniz :mocha --opts ./mocha.opts
quirimmo

1
ayrıca mocha komut satırına
--resursive yazabilirsiniz, paketinizde

282

Bunu kullan:

mocha server-test

Veya alt dizinleriniz varsa bunu kullanın:

mocha "server-test/**/*.js"

Çift tırnak kullanımına dikkat edin. Bunları atlarsanız, alt dizinlerde testler gerçekleştiremeyebilirsiniz.


1
Bu benim için işe yaramıyor. Eğer bu şekilde yapmak istersem yapmak zorundayımmocha test/server-test
jonnie

22
Çift tırnak sorunu beni yaş için vardı! Aklımı kurtardığın için teşekkürler. Bu çift tırnaklara daha fazla dikkat etmek için bunu okuyan herkese seslenin.
ctrlplusb

11
Benim durumumda, kullanıyordum mocha ./**/*.test.js(böylece test dosyasını modül dosyasıyla birleştirebilirim). Dosya hiyerarşisinde, testlerin geri kalanından farklı bir düzeyde bir test dosyası eklediğimde, desen benim için durdu ve hiyerarşide aynı seviyede yaşayan düzinelerce dosyayı değil, sadece bir tek top dosyasını bulurdu . Alıntılarla kaydırma düzeltildi.
Stoutie

1
ya da sadece --recursiveaşağıda açıkladığım gibi kullanın
Jeff Dickey

4
Cevap bu olmalı! Çift tırnak beni kurtarıyor
Minh Thai

81

Test klasörünüzde alt klasörler varsa, örneğin,

/test
/test/server-test
/test/other-test

Daha sonra linux'da tüm * .js dosyalarını tekrar tekrar listelemek ve mocha'ya iletmek için find komutunu kullanabilirsiniz:

mocha $(find test -name '*.js')

29
ya da sadece --recursiveaşağıda açıkladığım gibi kullanın
Jeff Dickey

5
Yani başka bir deyişle mochaconfig'te istenen dizin yapısını ayarlama seçeneği yok mu?
Yeşil

istemci kullanıcı $ mocha $ (testleri bul -adı '* .js') -bash: mocha: komut bulunamadı; Bu hatayı alıyorum.
lft93ryt

1
Bu çok karmaşık ve yanıltıcı. Bir OS komutu kullanmak yerine mocha seçeneklerini tercih edin.
Michael Bushe

mesajınız soruyu cevaplamıyor
ekkis

30

Bunu yapmanın en iyi yolu mocha'yı doğru argümanlarla çağıran package.json dosyasına bir "test" npm betiği eklemektir. Bu şekilde package.json, test yapınızı da açıklar. Diğer cevaplardaki tüm bu platformlar arası sorunları önler (çift tırnaklı tek tırnak, "bul" vb.)

Mocha "test" dizinindeki tüm js dosyalarını çalıştırmak için:

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },

Sonra sadece duman testlerini çalıştırmak için:

npm test

Tüm projelerde tüm testlerin yürütülmesini bu şekilde standart hale getirebilirsiniz, bu nedenle projenizde yeni bir geliştirici başladığında veya "npm test" in testleri çalıştıracağını bilirler. Bunun için iyi bir tarihsel öncelik vardır (Maven, örneğin, eski okulların çoğu "projeler" de yapar). Tüm projeler aynı test komutuna sahip olduğunda CI'ye yardımcı olur.

Benzer şekilde, mocha'nın çalışmasını isteyebileceğiniz daha hızlı "duman" testlerinin bir alt kümesine sahip olabilirsiniz:

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },

Sonra sadece duman testlerini çalıştırmak için:

npm smoketest

Diğer bir yaygın desen, testlerinizi test ettikleri kaynakla aynı dizine yerleştirmektir, ancak test dosyalarını * .spec.js olarak adlandırın. Örneğin: src / foo / foo.js, src / foo / foo.spec.js tarafından test edilir.

* .Spec.js adlı tüm testleri kurallara göre çalıştırmak için:

  "scripts": {
    "test": "mocha **/*.spec.js"
  },

Sonra tüm testleri çalıştırmak için:

npm test

Buradaki deseni görüyor musunuz? İyi. :) Tutarlılık mura yener .


Bunu yapmanın en doğru yolu sanırım.
ArturS

29

-G veya --grep seçeneğini kullanmayın, bu desen dosya sistemi değil, içindeki testin adıyla () çalışır. Mevcut dokümantasyon yanıltıcı ve / veya bununla ilgili açık yanlış. Komutun tamamını dosya sisteminin bir bölümü ile sınırlamak için, bir deseni son argüman olarak iletebilirsiniz (bir bayrak değil).

Örneğin, bu komut raportörünüzü spesifikasyona ayarlar, ancak yalnızca js dosyalarını sunucu-test dizininin hemen içinde test eder:

mocha --reporter spec server-test/*.js

Bu komut yukarıdakiyle aynı şekilde çalışır, ayrıca yalnızca bir testin it () dizesi / tanımının "Fnord:" ile başladığı test senaryolarını çalıştırır:

mocha --reporter spec --grep "Fnord:" server-test/*.js

22

Eğer içinde node.js , itibariyle bazı yeni yapılandırmalar Mocha v6 :

Seçenek 1: .mocharc.jsonProjenin kök dizininde oluşturun:

{
  "spec": "path/to/test/files"
}

2.Seçenek: mochaProjelerin özelliklerini ekleyin package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

Daha fazla seçenek burada .


20

Eşleşen test_directoryalt dizinler dahil olmak üzere tüm dosyaları çalıştırtest.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

veya --recursiveanahtarı kullanın

mocha --recursive test_directory/

11

Bu sorunu şimdi yaşadım ve --recursive(ayarladığım) seçeneği kaldırarak ve yukarıda önerilen aynı yapıyı kullanarak çözdüm:

mochify "test/unit/**/*.js"

Bu, /test/unit/içindeki diğer dizinleri göz ardı ederken benim için tüm dizinlerdeki tüm testleri çalıştırdı/test/



3

Windows 7'de node.js v0.10.0 ve mocha v1.8.2 ve npm v1.2.14 kullanıyorum. Sadece testlerimi bulmak için yol testini / birimini kullanmak için mocha almaya çalışıyordum, Uzun süre geçirdikten ve indiğim birkaç şeyi denedikten sonra,

"Test / unit / *. Js" seçeneğinin kullanılması pencerelerde çalışmaz. Windows kabuğunun unixen gibi joker karakterleri genişletmemesinin iyi nedenlerinden dolayı.

Ancak "test / birim" kullanımı dosya deseni olmadan çalışır. Örneğin. "mocha test / unit", test / birim klasöründe bulunan tüm dosyaları çalıştırır.

Bu, yalnızca bir klasör dosyasını sınama olarak çalıştırır ancak birden çok dizin adını parametre olarak iletebilirsiniz.

Ayrıca tek bir test dosyası çalıştırmak için tam yolu ve dosya adını belirleyebilirsiniz. Örneğin. "Mocha testi / birimi / mytest1.js"

Aslında npm "komut dosyaları" için package.json içinde kurulum yaptım: {"test": "mocha test / unit"},

Böylece 'npm testi' birim testlerimi çalıştırıyor.


11
Bugün itibariyle, --recursiveseçenek aşağıdaki gibi kullanılabilir :mocha --recursive "some_dir"
superjos

3
Kullanılması node_modules\.bin\mocha "test\unit\*.js"Windows üzerinde çalışmalarını. Ayrıca node_modules\.bin\mocha "**\*.js"çalışır (benim gerçek durumum). Ama node_modules dizinini hariç tutmak için bir yol arıyorum . (Ben de gulpfile.js kullanıyorum ama bazen doğrudan mocha ile test başlatmam gerekiyor)
Alex 75

3

Kullanıyorsanız nodejs, package.jsonaltındascripts

  1. İçin global (-g)tesisler: "test": "mocha server-test"ya"test": "mocha server-test/**/*.js"alt belgeler için
  2. İçin projecttesisler: "test": "node_modules/mocha/bin/mocha server-test"ya "test": "node_modules/mocha/bin/mocha server-test/**/*.js"alt belgeler için

Sonra testlerinizi normal şekilde yapın npm test


Bunu görüyorum ki npm run mocha "./test/*.spec.js!(~)"glob iddiası göz ardı ediliyor ama node_modules/.bin/mocha "./test/*.spec.js!(~)"değil.
ironchicken

@ironchicken "npm run" den argümanlar geçmek için kullanın - olduğu gibinpm run mocha -- yourArgs
Pedro A

3

@Superjos tarafından belirtildiği gibi yorumlarda kullanın

mocha --recursive "some_dir"


2

Bu test dizini değiştirmek için herhangi bir "kolay" destek gibi görünmüyor.
Ancak, belki de sorunuza göre bu konuya bir göz atmalısınız .


2

@ Jeff-dickey'nin önerdiği gibi, projenizin kökünde adlı bir klasör oluşturun test. Bu klasörde adlı bir dosya oluşturun mocha.opts. Şimdi Jeff'in cevabını geliştirmeye çalıştığım yerde, benim için işe yarayan tek bir test klasörünün adını belirtmek yerine, bu satırı ekleyerek projemde çalışacak tüm testleri bulmak için bir model belirledim:

*/tests/*.js --recursive içinde mocha.opts

Bunun yerine testleri aramak için tam klasörleri belirtmek isterseniz, böyle bir şey yaptım:

shared/tests/*.js --recursive
server/tests/graph/*.js --recursive

Umarım bu, diğer cevapların sağladığından daha fazlasına ihtiyaç duyan herkese yardımcı olur

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.