Jalankan hanya SATU tes dengan Jest


95

Sangat sederhana, saya hanya ingin menjalankan satu pengujian dengan Jest.

Saya menempatkan it.onlyatau describe.onlytetapi masih menjalankan banyak tes. Saya pikir itu menjalankan semua tes sejak komit terakhir saya, tetapi seharusnya perilaku ini tidak memiliki onlybendera yang ditetapkan secara eksplisit, bukan?

Apa yang menyebabkan perilaku ini dan cara menjalankan pengujian tunggal?



Jika saya menerima "bendera duplikat", itu "akan menandai pertanyaan Anda sebagai duplikat, mengarahkan pembaca mendatang ke pertanyaan asli dan mencegah jawaban lebih lanjut diposting di sini." Saya tidak berpikir mereka persis sama, karena setiap pertanyaan dan jawaban mengambil pendekatan yang berbeda.
jpenna

@jpenna: lihat saja pertanyaan aslinya. Jawaban yang sama diberikan.
Dan Dascalescu

Jawaban:


122

Jest memparalelkan pengujian yang dijalankan dan tidak tahu sebelumnya pengujian mana yang harus dijalankan dan yang tidak boleh dijalankan. Artinya, saat Anda menggunakan "fit", ini hanya akan menjalankan satu pengujian di file itu, tetapi masih menjalankan semua file pengujian lainnya di project Anda .

fit, fdescribedan it.only, describe.onlymemiliki tujuan yang sama, lewati tes lain, jalankan hanya saya.

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


Gunakan jestmekanisme pemfilteran, saat Anda menjalankan pengujian seperti

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

Anda dapat memfilter pengujian dengan testnameatau filename, cukup ikuti instruksi di terminal

masukkan deskripsi gambar di sini

Tekan p, lalu ketik nama file

masukkan deskripsi gambar di sini

Kemudian Anda dapat menggunakan describe.onlydan it.onlyyang akan melewati semua pengujian lain dari file yang difilter dan diuji.


1
Saya melakukan filter berdasarkan file ini, tetapi ini aneh ... Jadi, .onlyhanya berfungsi untuk pengujian file yang sama?
jpenna

2
Saya lebih suka hal itu, bahkan lebih, karena saya dulu lupa membatalkan .hanya dalam kode sumber dan melakukan itu.
Dziamid

3
Meskipun pengujian dilewati, tampaknya masih mengevaluasi kode yang diuji di setiap contoh. Benarkah tidak ada cara untuk hanya menjalankan satu pengujian di tahun 2019?
adaam

@adaam Saya tidak yakin apakah saya memahami pertanyaan Anda dengan benar, jadi mohon koreksi saya jika saya salah. Jika pengujian berada dalam file terpisah, hanya kode dalam file tertentu yang dijalankan saat Anda menggunakan pola untuk menjalankan pengujian secara eksplisit. Ketika kode untuk file tertentu dijalankan, seluruh kode dalam file tersebut diurai sehingga meskipun Anda menggunakan it.onlyatau it.skipuntuk satu pengujian yang berisi kesalahan sintaks, semua pengujian akan gagal. Tentu saja kode dari file yang dikecualikan oleh pola tidak akan dijalankan. imgur.com/z9FlQEZ
Dawid Karabin

@hinok Tempelkan console.log di komponen Carousel Anda dan ulangi runner pengujian Anda. Bagi saya, meskipun saya menggunakannya if.onlyconsole.logs dari komponen Carousel sebanyak ada tes yang dilewati / tidak dilewati untuk Komponen itu dalam pola jam tangan Anda.
adaam

29

it.onlydan describe.onlyhanya berfungsi untuk modul tempat mereka berada. Jika Anda mengalami masalah untuk memfilter pengujian dalam beberapa file, Anda dapat menggunakan jest -t name-of-spec, memfilter pengujian yang cocok dengan nama spesifikasi (cocok dengan nama dalam mendeskripsikan atau menguji).
Sumber: https://facebook.github.io/jest/docs/en/cli.html

Misalnya, saya memfokuskan tes yang saat ini saya tulis seperti ini (dengan skrip tes di package.json):
npm test -- -t "test foo"


4
Ini masih menjalankan setiap tes dalam kasus saya dan saya tidak tahu mengapa
Kenny

Satu-satunya penjelasan yang dapat saya pikirkan adalah bahwa Anda memberikan argumen string yang ada di setiap nama pengujian (atau describeblok pengujian ). Jika itu kasusnya, Anda harus mempersempit nama tes yang tepat yang ingin Anda fokuskan.
rodgobbi

Jawaban ini tampaknya jauh lebih cocok untuk pertanyaan lain: stackoverflow.com/questions/42827054/…
千 木 郷

8

seperti ini:

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

itu akan menguji semua file dengan nama sometest.test.jsdan pencocokan berdasarkan opsi -t, jika Anda hanya ingin menguji file tertentu Anda dapat melakukan ini:

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

Bagi mereka yang ingin menerapkan opsi ini dalam launch.jsonfile konfigurasi VSCode yang akan memicu pengujian pada kasus uji tertentu: medium.com/better-programming/…
Gus

8

Bagi saya itu berfungsi jika saya menggunakan 2 params seperti ini:

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

Bendera:

--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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.