Mocha ile tek bir test nasıl yapılır?


293

JavaScript şeylerimi test etmek için Mocha kullanıyorum. Test dosyam 5 test içeriyor. Dosyadaki tüm testlerden ziyade belirli bir test (veya test seti) çalıştırmak mümkün müdür?

Yanıtlar:


357

Mocha --grepseçeneğini kullanmayı deneyin :

    -g, --grep <pattern>            only run tests matching <pattern>

Geçerli herhangi bir JavaScript normal ifadesini olarak kullanabilirsiniz <pattern>. Örneğin, eğer test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

Sonra:

$ mocha -g 'logs a'

Tek bir test yapmak için. Bunun herkesin describe(name, fn)ve it(name, fn)çağrışımların adlarına hitap ettiğini unutmayın .

describe()Belirli kümeleri bulmayı ve seçmeyi kolaylaştırmak için ad aralığı için iç içe çağrılar kullanmayı düşünün .


1
Teşekkürler! --grepSadece @etiketlerden süzülen izlenimin altındaydım .
kumarharsh

5
Mocha'yı programlı olarak kullanırken (örneğin Grunt'tan), bir catch: grep seçeneğinin bir ´RegExp () ´ nesnesi olması gerekir. Eğer bir dize ise, kaçacaktır.
h-kippo

1
benim için işe yarayan tek çözüm bu. ( mocha some/test.js) komut satırında dosya belirtmek işe yaramadı. Teşekkürler!
hraban

2
Alt dize logs a bcdiçeren hangi çalıştırmak da önlemek için herhangi bir yolu var logs amı? Normal ifade ^$0.10.2 üzerinde çalışmıyor.
20'de Ciro Santilli 郝海东 冠状 病 六四

Dizini mocha -g 'log a' olarak belirtmezsem bazı hatalar alıyorum.
kta

167

Kullanım şeklinize bağlı olarak, yalnızca kullanmak isteyebilirsiniz . TDD stilini kullanıyoruz; şuna benzer:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

Tüm dosyalardan / süitlerden yalnızca bu test çalıştırılacaktır.


5
BDD aynı şekilde çalışır. Bu, tek bir test üzerinde çalışırken mükemmeldir. Ayrıca süit / açıklama düzeyinde de kullanılabilir
andyzinsser

14
Chai ve bu sözdizimi bekliyoruz it.only.
elkelk

4
O da iş moka iç karma, vb kullanılır ne zaman beri Bu cevap daha iyidir
Vivek Kodira

2
it.onlyile birlikte çalışmaz givenait mocha-TestData . Ve daha sonra kaldırmayı unutmak kolaydır.
Tr1et

4
eslint-plugin-mochano-exclusive-testskaldırmayı unutursanız sizi yakalayacak bir kuralı vardır .only.
dostu

84

Eğer kullanıyorsanız npm test(package.json komut dosyalarını kullanarak) ekstra kullanmak --mocha kadar param geçmesine

Örneğin npm test -- --grep "my second test"

EDIT : Görünüşe göre --grepbiraz telaşlı olabilir (muhtemelen diğer argümanlara bağlı olarak). Yapabilirsin:

Paketi değiştirin. Json:

"test:mocha": "mocha --grep \"<DealsList />\" .",

Ya da alternatif --bailolarak daha az telaşlı görünen kullanım

npm test -- --bail

3
Benim için çalıştı. Thanks :)
Jill-Jênn Vie

1
@Andy --grep biraz telaşlı olabilir - Mocha'dan hemen sonra npm komut dosyası girdisine koymayı deneyin. Else npm test -- --bail, ilk başarısız testten sonra balyalama için kullanışlıdır
Ashley Coolman

1
--grepgünümü kurtarmadan önce ekstra çizgiler geçiyor ! Çok teşekkürler. PS. Windows'dayım, koşuyorumnpm test -- --grep @tag
Mykola

18

tek bir test çalıştır (dosya adına göre)

Aslında, glob desenini (örneğin ) mocha.opts dosyasından kaldırırsanız, sırasıyla bir kopya oluşturursanız, dosya adına göre tek bir mocha testi de yapılabilir (sadece „it () - string-grepping“ ile değil) ./test/**/*.spec.js:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

İşte benim mocha.single.opts (sadece yukarıda belirtilen glob hattını kaçırmak farklıdır)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

Arka plan: opts-File'dan (ile başlayan --) çeşitli anahtarları geçersiz kılabilirsiniz ancak glob'u geçersiz kılamazsınız . Bu bağlantının bazı açıklamaları da var.

İpucu: eğer node_modules/.bin/mochakarıştırır Eğer yerel paket mocha kullanmaya. Ayrıca mocha, global olarak yüklediyseniz de yazabilirsiniz .


Ve şu konforları istiyorsanız package.json: Yine de: **/*-ish glob'u kendinizden çıkarın, mocha.optsburaya yerleştirin, tüm testler için, tek test için onları bırakın:

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",

kullanımı:

> npm run test

sırasıyla

> npm run test-single -- test/ES6.self-test.spec.js 

(dikkat --!)


Benim kurulumda 1 $ gerekli değildi, bunun yerine, gibi uyarılara yol açar: Warning: Could not find any test files matching pattern: $1
Merijn Vogel

15

Sadece 'tanımla', 'onu' veya 'bağlamı' kullanmadan önce kullanın. "$ Npm run test: unit" kullanarak çalıştırın ve sadece .only olan birimleri yürütür.

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

11

Merhaba yukarıdaki çözümler benim için işe yaramadı. Tek bir test yapmanın diğer yolu

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

Bu, bir test vakasını tek bir dosyadan ve belirli bir adla çalıştırmaya yardımcı olur.


1
Yeterince seçici olan bir ifade kullanın -gve bir dosya adı belirtmeniz gerekmez. Yeterince seçici bir ifade yazamıyorsanız, testlerinizi doğru şekilde adlandırmıyorsunuz demektir.
Louis

10
npm test <filepath>

Örneğin :

npm test test/api/controllers/test.js

burada 'test / api / controllers / test.js' dosyayoludur.


8

"İt.only" yi deneyebilirsiniz

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });

bunda sadece birincisi


2
Testler --forbid-onlyCI / build sunucusunda yapılmazsa tehlikelidir . .onlyana dalın içine girme ve diğer testleri artık yürütmeyecekleri için sessiz hale getirme eğilimi vardır. Ben bir anti-özellik farklı testler çalıştırmak için kod değiştirme iş akışını düşünmeye geldi. Test koşucusu, geliştiricinin değil hangi testlerin yapılması gerektiğini (etiketli testler olarak da bilinmelidir) belirlemelidir.
k0pernikus

Bunu yerelde bir işlevselliği test etmek için kullandım, Not: it.onlyrepo ile kodlama yapma
Bikesh M


0

Npm testi kullanılırken neden grep yönteminin benim için çalışmadığından emin değilim. Bu işe yarıyor. Ayrıca bazı nedenlerden dolayı test klasörünü de belirtmem gerekiyor.

npm testi - test / sometest.js


0

Tüm testlerinizi tek bir test.js dosyasında birleştirin ve paketiniz json komut dosyalarını şu şekilde ekler:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

Test dizininize command yazın:

npm run api:test
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.