Episode ini membahas studi kasus ecommerce, SaaS onboarding, dan dashboard flows, best practices untuk test design dan prioritas, menyeimbangkan unit, integration, dan E2E tests, serta end-to-end reliability patterns.

Semua teknik yang sudah dipelajari kini diuji pada kasus nyata. Episode 20 membahas pola dari tiga jenis aplikasi yang paling umum: ecommerce, SaaS onboarding, dan dashboard flows, plus best practices perancangan test, keseimbangan lapis pengujian, dan pola reliabilitas end-to-end.
Ini adalah episode penerapan: bukan sintaks baru, melainkan cara menyusun suite yang masuk akal untuk produk sungguhan.
Ecommerce punya alur inti yang wajib diuji: katalog, keranjang, dan checkout. Prioritaskan alur yang menghasilkan pendapatan:
it("menyelesaikan pembelian produk", () => {
cy.intercept("GET", "/api/produk*").as("katalog");
cy.visit("/katalog");
cy.wait("@katalog");
cy.get("[data-cy=produk]").first().click();
cy.get("[data-cy=tambah-keranjang]").click();
cy.get("[data-cy=keranjang]").should("contain.text", "1");
cy.get("[data-cy=checkout]").click();
cy.contains("Terima kasih").should("be.visible");
});cy.intercept("GET", "/api/produk*").as("katalog") menunggu data katalog selesai dimuat sebelum interaksi. Alur ecommerce difokuskan pada jalur pembelian utama yang paling sering dipakai pengguna.
Onboarding menentukan retensi. Uji alur pendaftaran sampai aktivasi akun:
it("pengguna baru menyelesaikan onboarding", () => {
cy.visit("/daftar");
cy.get("[data-cy=email]").type("user@example.com");
cy.get("[data-cy=password]").type("rahasia123");
cy.get("[data-cy=daftar]").click();
cy.get("[data-cy=langkah-1]").should("be.visible");
cy.get("[data-cy=pilih-peran]").select("engineering");
cy.get("[data-cy=lanjut]").click();
cy.contains("Workspace siap").should("be.visible");
});cy.get("[data-cy=pilih-peran]").select("engineering") mengisi langkah onboarding. Setiap langkah diverifikasi sebelum lanjut, sehingga lokasi kegagalan mudah dilacak jika onboarding berubah.
Dashboard kaya data dan filter. Fokus test pada kebenaran filter dan data yang tampil:
it("memfilter laporan berdasarkan rentang tanggal", () => {
cy.intercept("GET", "/api/laporan*").as("laporan");
cy.visit("/dashboard");
cy.get("[data-cy=rentang]").select("30h");
cy.wait("@laporan");
cy.get("[data-cy=total]").should("not.be.empty");
});cy.get("[data-cy=rentang]").select("30h") mengganti filter rentang. cy.wait("@laporan") memastikan data baru dimuat sebelum memeriksa hasil — menghindari assertion terhadap data lama.
Prioritaskan test berdasarkan risiko dan frekuensi: alur yang dipakai jutaan pengguna, alur yang menyangkut uang, dan alur yang sering rusak. Gunakan matriks sederhana:
Setiap test yang ditulis harus bisa menjawab pertanyaan: alur penting apa yang dilindungi, dan apa yang terjadi jika test ini gagal?
Test terbaik terbaca seperti deskripsi alur, bukan implementasi. Jika nama test dan langkahnya berubah menjadi cerita yang jelas, perawatan jadi lebih mudah dan debugging lebih cepat.
Kembali ke episode 0: unit test paling banyak dan tercepat, integration test menengah, E2E paling sedikit dan paling mahal:
Unit: 70% - cepat, terisolasi, tanpa browser.
Integration: 20% - kerja sama modul, sebagian memakai browser.
E2E: 10% - alur pengguna penuh, paling mahal.Proporsi Unit: 70% adalah panduan, bukan hukum. E2E harus menjawab pertanyaan yang tidak bisa dijawab lapis lain — alur pengguna utuh — dan bukan duplikasi assertion yang seharusnya di unit.
Jangan menguji di E2E apa yang sudah dijamin unit. E2E cukup memverifikasi bahwa unit yang sudah benar berintegrasi dengan benar. Ini menjaga suite tetap ramping dan berjalan cepat.
Beberapa pola yang menaikkan reliabilitas:
cy.intercept() untuk data yang stabil.data-cy untuk seluruh selector.Setiap test E2E sebaiknya bisa berjalan sendiri maupun bersama suite. Independensi berarti tidak ada urutan tersembunyi antar test — kunci suite yang bisa diparalelkan dan dipecah tanpa rasa takut.
Tip
Mulai menulis E2E dari tiga alur paling bernilai produk kalian, bukan dari daftar halaman. Tiga alur yang penting dan stabil lebih baik daripada tiga puluh alur yang acak dan rapuh.
Episode 20 menghubungkan teknik dengan praktik nyata: alur ecommerce, onboarding SaaS, dan filter dashboard, prioritas test berdasarkan risiko, keseimbangan piramida unit-integration-E2E, serta pola reliabilitas yang membuat alur tetap andal dan independen.
Inti yang harus dibawa pulang:
Di episode 21 selanjutnya kita akan membahas ekosistem dan tools — Cypress plugins, dashboard, dan community resources, tools pendukung seperti Testing Library, Storybook, dan Percy, dukungan cross-browser, serta learning resources dan dokumentasi.