Cakupan kode untuk Jest

131

Apakah ada cara untuk memiliki cakupan kode dalam kerangka pengujian Javascript Jest yang dibangun di atas Jasmine?

Kerangka internal tidak mencetak cakupan kode yang didapatnya. Saya juga sudah mencoba menggunakan Istanbul , selimut dan JSCover , tetapi tidak ada yang berfungsi.

Alex Palcuie
sumber
Saya tidak terlalu suka bercanda, tetapi apakah Anda melihat config.collectCoverage ?
Ciro Costa

Jawaban:

123

Saat menggunakan Jest 21.2.1 , saya bisa melihat cakupan kode di baris perintah dan membuat direktori cakupan dengan meneruskan --coverageke skrip Jest. Di bawah ini adalah beberapa contoh:

Saya cenderung menginstal Jest secara lokal, dalam hal ini perintahnya mungkin terlihat seperti ini:

npx jest --coverage

Saya berasumsi (meskipun belum mengkonfirmasi), bahwa ini juga akan berfungsi jika saya menginstal Jest secara global:

jest --coverage

Dokumen yang sangat jarang ada di sini

Ketika saya menavigasi ke direktori coverage / lcov-report saya menemukan file index.html yang dapat dimuat ke browser. Itu termasuk informasi yang dicetak pada baris perintah, ditambah informasi tambahan dan beberapa keluaran grafis.

ccalvert
sumber
7
Jangan pernah menggunakan modul global. Untuk memastikan konsistensi versi, dan kehadiran paket, selalu gunakan executable di node_modulesvia ./node_modules/.bin/jest --coverage. Selama paket tersebut disebutkan dalam package.json, Anda dapat menjamin eksekusi dengan versi lelucon yang Anda harapkan.
taystack
Bagaimana cara mendapatkan cakupan lelucon hanya untuk file yang diubah?
Shanika Ediriweera
Apakah ada cara mudah untuk gagal tes jika cakupan di bawah batas tertentu? Pertanyaan SO yang sesuai: stackoverflow.com/questions/60512167/…
Stefan
@ShanikaEdiriweera jestjs.io/docs/en/cli.html#--collectcoveragefromglob
marcellothearcane
88

UPDATE: 7/20/2018 - Tautan yang ditambahkan dan nama yang diperbarui untuk coverageReporters.

UPDATE: 8/14/2017 - Jawaban ini benar-benar ketinggalan jaman. Lihat saja dokumen Jest sekarang. Mereka memiliki dukungan dan dokumentasi resmi tentang cara melakukan ini.

@hankhsiao punya repo bercabang-cabang di mana Istanbul bekerja dengan Jest. Tambahkan ini ke dependensi dev Anda

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

Pastikan juga cakupan diaktifkan di entri gurauan package.json Anda dan Anda juga dapat menentukan format yang Anda inginkan. (The html adalah pantat yang sangat buruk).

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

Lihat dokumentasi Jest untuk coverageReporters (standarnya adalah ["json", "lcov", "text"])

Atau tambahkan --coverageketika Anda memanggil lelucon.

Adrian Adkison
sumber
1
Opsi coverageFormats telah dihapus - sepertinya json dan html dihasilkan setiap waktu.
1
Saya menggunakan opsi --coverage tetapi sama sekali tidak ada yang berbeda terjadi.
gbbr
3
Ini (sekarang) dipanggil coverageReportersdan defaultnya adalah ["json", "lcov", "text"]. Lihat facebook.github.io/jest/docs/…
Karsten S.
jangan berhasil, opsi "coverageFormats" dengan nilai ["json", "html"] tidak ditemukan.
srghma
40

Jan 2019: Jest versi 23.6

Bagi siapa pun yang melihat pertanyaan ini baru-baru ini terutama jika pengujian menggunakan npmatau yarnlangsung

Saat ini, Anda tidak perlu mengubah opsi konfigurasi

Sesuai situs web resmi lelucon , Anda dapat melakukan hal berikut untuk menghasilkan laporan cakupan:

1- Untuk npm:

Anda harus meletakkan --sebelum melewati --coverageargumen lelucon

npm test -- --coverage

jika Anda mencoba memanggil --coveragelangsung tanpa --itu tidak akan berhasil

2- Untuk benang:

Anda dapat melewatkan --coverageargumen lelucon secara langsung

yarn test --coverage
Ahmed Elkoussy
sumber
1
Bagaimana cara mendapatkan cakupan lelucon hanya untuk file yang diubah?
Shanika Ediriweera
Berubah sejak kapan? Anda mungkin ingin menggunakan --watchpengaturan untuk ini.
koehn
1
Jawaban ini membuat banyak asumsi tentang keadaan orang package.json.
airtonix
6

Baiklah, abaikan jawaban saya sebelumnya karena seseorang mengatakan kepada saya bahwa itu tidak menyelesaikan masalah.

Jawaban Baru:

1) Periksa lelucon terbaru (v 0.22): https://github.com/facebook/jest

2) Tim facebook menempatkan istanbul sebagai bagian dari laporan liputan dan Anda dapat menggunakannya secara langsung.

3) Setelah mengeksekusi lelucon, Anda bisa mendapatkan laporan cakupan pada konsol dan di bawah folder root yang ditetapkan oleh lelucon, Anda akan menemukan laporan cakupan dalam format json dan html.

4) FYI, jika Anda menginstal dari npm, Anda mungkin tidak mendapatkan versi terbaru; jadi cobalah github terlebih dahulu dan pastikan cakupannya adalah yang Anda butuhkan.


Jawaban lama:

Punya masalah yang sama juga. Jawaban singkatnya adalah: Istanbuldan JestTIDAK bekerja sama.

Periksa halaman-halaman berikut untuk detail lebih lanjut:

https://github.com/facebook/jest/issues/101

jest menggunakan contextify yang menjalankan skrip JS dalam konteks V8 dalam kode asli sehingga melewati semua kebutuhan istanbul dan kait vm.runInThisContext. Jadi penutup istanbul tidak akan berfungsi karena fungsi node.js hookable standar tidak digunakan dan file pra-instrumenting tidak akan membantu karena setiap tes berjalan di kotak pasir sendiri dan tidak ada global di mana untuk menyimpan objek cakupan.

@ Circo Costa: config.collectCoverageTIDAK berfungsi, karena ini adalah fungsi 'TODO'. Silakan periksa kode sumber.

Musim dingin
sumber
Pertanyaannya adalah bagaimana cara mendapatkan cakupan Kode untuk Jest. Bahwa Istanbul dan Jest tidak bekerja bersama mungkin benar, tetapi itu tidak menjawab pertanyaan.
David Raab
0

Jika Anda mengalami masalah dengan --coverage tidak berfungsi, itu mungkin juga karena memiliki coverageReporters diaktifkan tanpa 'teks' atau 'ringkasan teks' yang ditambahkan. Dari dokumen: "Catatan: Mengatur opsi ini menimpa nilai default. Tambahkan" teks "atau" ringkasan teks "untuk melihat ringkasan cakupan dalam output konsol." Sumber

thebkr7
sumber
0

Konfigurasikan file package.json Anda

"test": "jest --coverage",

masukkan deskripsi gambar di sini

Sekarang jalankan:

yarn test

Semua tes akan mulai berjalan dan Anda akan mendapatkan laporan. masukkan deskripsi gambar di sini

Saif Siddiqui
sumber
-1

Saya memiliki masalah yang sama dan saya memperbaikinya seperti di bawah ini.

  1. pasang benang npm install --save-dev yarn
  2. instal jest-cli npm install --save-dev jest-cli
  3. tambahkan ini ke package.json "jest-coverage": "yarn run jest -- --coverage"

Setelah Anda menulis tes, jalankan perintah npm jalankan jest-coverage. Ini akan membuat folder cakupan di direktori root. /coverage/icov-report/index.html memiliki tampilan html dari cakupan kode.

Selamat coding!

Laksh
sumber
8
Tidak perlu memasang benang. Yarn hanyalah pengelola paket yang berbeda dengan NPM
Black
-10

Coba Chutzpa . Saya baru saja menggunakannya. Dan saya menulis blog tentang cara mengintegrasikan dalam Visual Studio.

Ini adalah bagaimana saya melakukan cakupan kode dengan Chutzpah: http://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/

francorobles
sumber
Chutzpath dibangun di atas Blanket dan saya sebutkan di atas bahwa Jest tidak bekerja dengannya.
Alex Palcuie
Menarik karena milik saya baru saja bekerja. francorobles.wordpress.com/2014/09/14/…
francorobles
1
Anda tidak menggunakan Jest, yang secara default mengolok-olok setiap require.
Alex Palcuie