Test paling berguna saat menjawab pertanyaan yang jelas: apakah perilaku ini bekerja, dan jika rusak, apakah test membantu menemukan penyebabnya? Testing pyramid membantu menyeimbangkan feedback. Ini panduan tentang cakupan test, bukan aturan bahwa setiap proyek harus memakai persentase yang sama.
Unit test: periksa satu keputusan dengan cepat #
Unit test memeriksa bagian kecil dari logika tanpa menjalankan sistem lain yang tidak diperlukan. Contohnya kalkulator harga, parser, atau konversi tanggal. Test sebaiknya cepat dan menunjukkan lokasi penyebab saat gagal.
Unit test yang berguna mencakup nilai umum, nilai batas, dan input yang tidak valid. Test seperti ini tidak perlu memakai database sungguhan atau koneksi jaringan.
Integration test: periksa komponen yang bekerja bersama #
Integration test memeriksa batas antara komponen. Contohnya repository yang menyimpan data ke database test, route API yang memvalidasi request, atau komponen UI yang berkoordinasi dengan state form. Test ini menemukan masalah konfigurasi dan koneksi antarkomponen yang tidak terlihat dalam unit test.
Gunakan kolaborator nyata jika murah dan hasilnya konsisten, seperti database sementara. Ganti layanan eksternal yang lambat atau tidak dapat diprediksi pada batas integrasinya.
End-to-end test: periksa alur pengguna #
End-to-end test menjalankan aplikasi melalui browser atau API publik, misalnya membuat akun lalu melihat halaman sambutan. Cakupannya luas dan memberi keyakinan bahwa bagian penting bekerja bersama, tetapi prosesnya lebih lambat dan dapat terganggu setup atau timing.
Batasi test ini pada alur bernilai tinggi. Tidak perlu mengulang setiap kasus batas unit test lewat browser.
Menjaga suite tetap seimbang #
Sebagian besar proyek terbantu oleh banyak test cepat yang fokus, sekelompok integration test yang lebih kecil, dan beberapa end-to-end test. Jika test sering gagal secara acak, periksa apakah test itu melewati terlalu banyak batas sistem. Test perhitungan tidak perlu browser; test alur pembelian penting sebaiknya tidak meniru semua komponen yang justru perlu diperiksa.
Pilih tingkat test berdasarkan pertanyaannya. Mulai dari perilaku yang bisa diamati, lalu gunakan cakupan tersempit yang cukup untuk membuktikannya. Tambahkan test yang lebih luas saat kegagalan lintas komponen akan berdampak besar.