Lompat ke konten
Kembali ke modul

Testing, Debugging, dan Kualitas Kode · 4/7

Unit, integration, dan end-to-end

Berapa biaya masing-masing, apa yang ditangkap masing-masing, dan berapa banyak yang sebenarnya kamu perlukan.

Baca 25 menit

Setelah pelajaran ini kamu bisa

  • Membedakan test unit, integration, dan end-to-end
  • Menjelaskan pertukaran yang dibuat masing-masingnya
  • Menentukan berapa banyak yang kamu inginkan dari masing-masingnya
  • Menjelaskan biaya sebuah test yang flaky
UnitIntegrationEnd-to-end
MengujiSatu function atau componentBeberapa bagian bersamaanSeluruh aplikasi di browser
KecepatanMilidetikPuluhan ms sampai detikDetik sampai menit
MenangkapKesalahan logikaKesalahan perakitanApa pun, termasuk konfigurasi deploy
MelewatkanSemua soal perakitanPerilaku browser sungguhanTidak ada — tapi lambat
Saat gagalKamu tahu persis di manaKira-kira di manaDi suatu tempat di aplikasinya
AlatvitestvitestPlaywright, Cypress

Saran klasiknya adalah sebuah piramida: banyak unit test yang cepat, lebih sedikit integration test, dan segelintir test end-to-end. Alasannya hitungan, bukan ideologi.

Coba sendiri

Hitungan di balik piramidanya. Bandingkan total waktu jalan dan apa yang ditangkap masing-masing komposisi.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Test yang flaky

Test flaky kadang lolos dan kadang gagal tanpa perubahan kode. Ia lebih buruk daripada test yang tidak ada, karena ia menghancurkan otoritas suite-nya: begitu orang menjalankan ulang CI supaya jadi hijau, kegagalan sungguhan pun ikut dijalankan ulang.

PenyebabPerbaikan
Menunggu jumlah ms yang tetapTunggu sebuah kondisi — await screen.findByRole(...)
Test berbagi stateReset di antara test; proyek ini membersihkan tabelnya di beforeEach
Bergantung pada urutan testSetiap test harus menyiapkan sendiri semua yang dibutuhkannya
Tanggal sungguhan dan Math.random()Suntikkan nilainya, atau bekukan waktunya
Panggilan jaringan sungguhanStub — internet bukan fixture test-mu
Perbedaan zona waktu atau localeTetapkan keduanya; jalankan CI dengan TZ berbeda untuk menangkapnya

Tugas praktik

Jalankan bun run test dan catat total waktunya. Lalu jalankan bun run test curriculum dan bandingkan. Sekarang sengaja buat sebuah test bergantung pada urutan: di progress.node.test.ts, pindahkan satu test ke atas beforeAll yang membuat user-nya lalu lihat ia gagal. Kegagalan itulah bentuk dari ketergantungan urutan.

Hasil yang diharapkan

Seluruh suite dalam beberapa detik; kegagalan yang jelas saat setup-nya dilewati.