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.