Jest ile yalnızca BİR test çalıştırın


95

Çok basit, Jest ile sadece bir test yapmak istiyorum.

it.onlyVeya koydum describe.onlyama yine de birçok test yapıyor. Sanırım son taahhüdümden beri tüm testleri çalıştırıyor, ancak bu davranış onlyaçıkça belirlenmiş bayrakla olmamalı , değil mi?

Bu davranışa ne sebep olur ve tek bir test nasıl yapılır?



"Yinelenen bayrağı" kabul edersem, bu "sorunuzu bir kopya olarak işaretleyerek gelecekteki okuyucuları orijinal soruya yönlendirecek ve daha fazla yanıtın burada yayınlanmasını engelleyecektir." Her soru ve cevap farklı yaklaşımlar aldığından, bunların tamamen aynı olduğunu düşünmüyorum.
jpenna

@jpenna: orijinal soruya bir bakın. Aynı cevaplar verildi.
Dan Dascalescu

Yanıtlar:


122

Jest, test çalıştırmalarını paralelleştirir ve hangi testleri çalıştırıp hangilerini çalıştırmaması gerektiğini önceden bilmez. Bu, "fit" kullandığınızda, o dosyada yalnızca bir test çalıştıracağı, ancak yine de projenizdeki diğer tüm test dosyalarını çalıştıracağı anlamına gelir .

fit, fdescribeVe it.only, describe.onlysadece bana çalıştırmak, başka testler atlamak, aynı amaca hizmet eder.

Kaynak: https://github.com/facebook/jest/issues/698#issuecomment-177673281


jestTestlerinizi aşağıdaki gibi çalıştırdığınızda filtreleme mekanizmasını kullanın:

jest --config=jest.config.json --watch

Testleri bir testnameveya ile filtreleyebilirsiniz filename, sadece terminaldeki talimatları izleyin

görüntü açıklamasını buraya girin

Basın p, ardından bir dosya adı yazın

görüntü açıklamasını buraya girin

Sonra kullanabilir describe.onlyve it.onlyfiltre test dosyadan tüm diğer testler hangi atlar.


1
Bu filtreyi dosyaya göre yapıyorum, ama bu garip ... Yani .onlyaynı dosyanın testleri için tek işe yarıyor mu?
jpenna

2
Bunu daha çok seviyorum, çünkü eskiden .only kaynak kodunda geri almayı unuttuğum ve bunu işlediğim için.
Dziamid

3
Testler atlanmış olsa da, yine de her örnekte test edilen kodu değerlendiriyor gibi görünüyor. 2019'da sadece tek bir test yapmanın gerçekten bir yolu yok mu?
adaam

@adaam Sorunuzu doğru anladığımdan emin değilim, bu yüzden lütfen yanılıyorsam beni düzeltin. Testler ayrı dosyalardaysa, testleri açıkça çalıştırmak için desen kullandığınızda yalnızca belirli dosyadaki kod çalıştırılır. Belirli dosya için kod çalıştırıldığında kullanmak bile, bu dosyada bütün kod böylece ayrıştırılır it.onlyveya it.skipsözdizimi hatası içeren tek bir test için, tüm testler başarısız olacaktır. Elbette desen tarafından dışlanan dosyalardan kod çalıştırılmayacaktır. imgur.com/z9FlQEZ
Dawid Karabin

@hinok Atlıkarınca bileşeninize bir console.log yapıştırın ve test koşucunuzu tekrar çalıştırın. Benim için, if.onlysaat düzenlerinizde bu Bileşen için atlanan / atlanmayan testler olduğu kadar, Carousel bileşeninden console.logs kullansam bile .
adaam

29

it.onlyve describe.onlyyalnızca içinde bulundukları modül için çalışın. Birden fazla dosyadaki testleri filtrelemekte sorun yaşıyorsanız jest -t name-of-spec, spesifikasyon adıyla eşleşen filtreleme testlerini kullanabilirsiniz (açıklama veya testteki adla eşleşin).
Kaynak: https://facebook.github.io/jest/docs/en/cli.html

Örneğin, şu anda yazdığım teste odaklanıyorum (içindeki test komut dosyasıyla package.json):
npm test -- -t "test foo"


4
Bu hala benim durumumdaki her testi çalıştırıyor ve neden olduğuna dair hiçbir fikrim yok
Kenny

Aklıma gelen tek açıklama, her bir test adında (veya test describebloğunda) var olan bir dize argümanı iletiyor olmanızdır . Eğer durum buysa, odaklanmak istediğiniz tam test adına daraltmalısınız.
rodgobbi

Bu cevap başka bir soru için çok daha uygun görünüyor: stackoverflow.com/questions/42827054/…
千 木 郷

8

bunun gibi:

jest sometest.test.js -t "some expression to match a describe or a test"

sometest.test.js-t seçeneğine göre ad ve eşleşmeye sahip tüm dosyaları test eder , yalnızca belirli bir dosyayı test etmek istiyorsanız bunu yapabilirsiniz:

jest src/user/.../sometest.test.js

Bu seçeneği, launch.jsonbelirli bir test senaryosunda
Gus

8

Benim için şu şekilde 2 parametre kullanırsam işe yarar:

yarn test --watch -f "src/...fullpath.../reducer.spec.js" -t "Name of the test"

Bayraklar:

--watch: is optional

-f: will do filtering of your files, so if you have a lot of tests with the same name, specify the full path to the exact file

-t: works with 'describe' name or 'it' name of your 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.