Test E2E yang Bisa Dipanggil Ulang Pakai Nama Modul
Lupa nama file spec tiap mau nge-test satu halaman? Resolver tipis plus ledger cakupan yang boleh jujur.
Ringkasan
Daripada pusing cari file test peta manual, sekarang tinggal pakai run_page.sh buat ngejalanin modulnya langsung. Dia cuma nerjemahin nama jadi file spec Playwright, jadi simpel banget. Terus ada INDEX.md yang jujur nyatet modul mana udah ada test mana belum.
Mau rilis perbaikan kecil di halaman /peta. Yang saya butuhkan sebenarnya cuma test buat halaman itu. Masalahnya, ingatan bukan tempat yang bagus buat nyimpen "test peta filenya apa, dijalanin pakai flag apa".
Kebiasaan lamanya: buka folder spec E2E, scroll satu-satu, nebak-nebak nama file. Kalau ragu, jalanin semua suite. Nggak lama-lama banget, cuma boros waktu pas yang saya perlukan sebenernya satu file. Test yang pernah ditulis itu rapuh di sisi yang nggak ketebak: filenya nggak hilang dari repo, tapi hilang dari daftar siapa-nguji-apa.
Commit ini ngasih dua artefak buat masalah itu: run_page.sh buat memanggil, INDEX.md buat nyatet.
Resolver tipis di atas bawaan Playwright
Playwright memang udah nerima nama file spec atau folder langsung sebagai argumen [7]. Jadi resolver-nya nggak perlu cerdas. run_page.sh isinya 73 baris, intinya nerjemahin nama modul jadi target: ada folder ? Jalankan folder itu. Ada file yang cocok? Jalankan semua. Nggak ketemu? Gagal dengan pesan yang ngarah: "lihat: run_page.sh --list".
Deteksi file-nya mantap ke pola bawaan Playwright, jadi file spec di folder E2E otomatis jadi kandidat modul [6]. Sementara opsi daftar-nya nampilin modul plus deskripsi yang diambil dari blok describe pertama di tiap file. Argumen setelah nama modul diteruskan mentah ke Playwright, makanya mode ber-jendela tetap jalan [7]:
bash scripts/unit_testing/run_page.sh --list
bash scripts/unit_testing/run_page.sh peta --headed
Nggak ada parser JSON, nggak ada mapping manual. Saat mikir "harus bikin script macem apa", jawabannya justru seminimal mungkin: semua kemampuan pemanggilan selektif itu udah punya Playwright, yang nggak ada cuma lapisan penamaannya.
INDEX.md, ledger yang boleh jujur
Resolver cuma jawab "gimana manggilnya". Pertanyaan yang lebih sering kelewat: "apa aja yang udah tertutup test?". Makanya ada INDEX.md: tabel per halaman atau fitur lintas empat tier, dari E2E per halaman sampai unit FE dan smoke, lengkap dengan kolom perintah panggil-ulang.
Yang bikin ledger ini nggak busuk malah aturannya: slice baru yang bawa test wajib nambah baris di commit yang sama. Dan barisnya boleh jujur. Modul admin belum punya spec, dan di tabel dia ditulis apa adanya: belum ada spec, slice tertentu wajib bikin plus update baris ini. Kondisi "belum dites" jadi kelihatan, bukan hilang diam-diam di antara file yang nggak pernah dibuka.
Satu jebakan kecil yang saya catat: --list ada dua. Punya Playwright ngumpulin semua test terus nampilin tanpa nge-run [8]. Punya run_page.sh cuma nampilin modul dari nama file. Bedanya tipis, tapi pas ngetik di terminal bisa kebolak-balik.
Pintunya satu
Aturan testing di repo sekarang melarang ngetik perintah go atau npm langsung: semua test lewat satu folder runner. Alasannya bukan estetika. Flag yang menentukan suka kelewat pas ngetik manual, kayak nomor proses satu di runner backend yang jagain database test bersama antar-package.
Kebiasaan saya sekarang: abis ngubah satu halaman, tinggal run_page.sh . Kalau spec-nya ternyata belum ada, yang ngomong bukan tebakan saya, tapi INDEX.md — lengkap dengan aturan siapa yang wajib ngisinya.
Sources
[6] https://github.com/microsoft/playwright/blob/main/docs/src/test-configuration-js.md
[7] https://github.com/microsoft/playwright/blob/main/docs/src/running-tests-js.md
[8] https://github.com/microsoft/playwright/blob/main/docs/src/test-cli-js.md