testing
Catatan teknis seputar web development, DevOps, dan integrasi AI.
54 artikel
- 18.02tooling
Pagi Itu, Tool Riset Saya Menelan Obatnya Sendiri
Baris pruned di build pagi mengungkap dua hal: index vektor tanpa pruning menjawab pakai dokumen yang sudah tidak ada, dan format bebas itu kontrak implisit.
TL;DR: Gara-gara rename file dossier lupa update index vektor, query malah ngasih dokumen hantu yang udah nggak ada. Fix-nya cuma 64 baris tapi ada tiga lapis: baca field ringkasan/summary yang toleran, pruning otomatis file hilang, sama selftest yang sengaja dibikin gagal. Intinya index jadi jujur lagi dan nggak percaya sama dokumen yang cuma ada di JSON doang.
#python#embedding#backward-compatibility - 21.37testing
Guard yang Bilang Tidak dan Jalan Pulang Migrasi
Commit test-only: pembuktian guard global via httptest dan jalur down migrasi di MySQL 5.7 beneran mundur lalu pulih.
TL;DR: Ternyata file down migration sama middleware penolak nggak pernah ditest beneran. Sekarang guard-nya diuji pakai table-driven test, yang ALL lolos 200 tapi bidang lain kena 403 kecuali konteks kosong yang sengaja fail-open. Terus jalur down juga dibuktiin lewat tes integrasi yang nurunin migrasi ke 56 sampai kolomnya hilang lalu naik lagi sampai balik.
#go#testing#mysql - 08.07testing
E2E Modul Admin: Menguji Guard Role dan Bidang Lewat UI
Tiga spec Playwright buat area admin: login via UI beneran, CRUD sampai hapus permanen dengan verifikasi API, dan guard role/bidang yang diuji di level server.
TL;DR: Gue kira redirect frontend buat blokir editor dari menu Pengguna, ternyata gampang dibobol kalau backend gak ikut ngejaga. Jadi tes e2e nya ngecek dua lapis, menu yang ngilang di UI dan server yang wajib ngasih 403 kalau dipaksa bikin user. Ada trik login pakai exact biar gak salah klik, isi Tiptap lewat ProseMirror, sama cek hapus data langsung via API.
#playwright#e2e#testing - 07.26testing
Ketika Tabel Migrasi Berbohong di Test Integrasi Bidang
Suite hijau padahal skema test DB basi: schema_migrations cuma catat file migrasi, volume Docker lama diam-diam bawa skema lama.
TL;DR: Test ijo semua tapi gue curiga kolom bidang belum kebawa di DB beneran. Ternyata volume MySQL lama masih kepake, migrate ngeliat versi 58 jadi skip padahal skema basi. Sekarang tiap test dibersihin total pake down --volumes biar migrasi jalan dari nol dan hasilnya beneran valid.
#go#mysql#testing - 05.04backend
Enforcement RBAC Bidang: Gerbang Middleware dan Filter IN
Enforcement scope bidang di Go: middleware di gerbang, filter IN di repository, dan subtest yang membaca seperti policy keamanan.
TL;DR: Gerbangnya dijaga middleware ResolveBidang yang nempelin scope bidang ke context abis JWT dicek, jadi handler tinggal baca aja. Di repo filternya pakai sqlx.In buat kategori dan IS NULL OR = buat announcements, route global sama CMS dipisah biar gampang diaudit. Repo sengaja fail-open kalau modul kosong, tapi tetap aman karena semua route admin wajib lewat gerbang dan dikunci subtest t.Run.
#go#mysql#security - 04.19testing
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.
TL;DR: 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.
#testing#playwright#e2e - 04.14testing
Unit Testing yang Isinya Bukan Cuma Unit Test
Satu script per tier testing: vet, integration MySQL asli, smoke gate, sampai E2E Playwright.
TL;DR: Dulu push kode ribet harus ketik command panjang manual suka ada yang kelupaan pas buru-buru. Sekarang semua diringkas jadi empat script backend frontend e2e sama smoke yang otomatis berhenti kalau ada yang gagal. Ditambah ada panduan jelas di README kapan harus jalanin tes yang mana jadi nggak nebak-nebak lagi.
#testing#bash#go - 03.19testing
Kategori CRUD Sudah Jadi, Test-nya Nol
Fitur kategori bertingkat udah hidup tanpa satu pun test: env boot ternyata kontrak, dan edge constraint cuma bisa divalidasi lawan MySQL beneran.
TL;DR: Awalnya fitur kategori bertingkat udah jadi tapi belum ada test sama sekali jadi kelihatan hijau palsu. Terus gue benerin TestHealthEndpoint yang gagal boot karena env belum di-set pakai Setenv plus nambah tiga test integrasi buat cek constraint hapus parent/child di MySQL asli. Testnya dikunci tag integration dan harus jalan pakai -p 1 biar nggak rebutan database barengan.
#golang#testing#mysql - 23.38testing
Tes paritas tanpa validator bersama
Dua gerbang validasi tetap terpisah, tapi tabel uji parametrik mengikat keduanya pada kontrak accept/reject yang sama dan presedensi error yang sama.
TL;DR: Awalnya mau bikin validator bareng buat plane-init sama plane-doc-sync biar error-nya sama persis, tapi ternyata import silang pas runtime dilarang. Akhirnya parity-nya dibuktiin lewat tabel pytest parametrize yang ngelempar input jahat yang sama ke dua modul itu. Aturannya traversal error harus menang duluan daripada error bentuk file, jadi path aman dicek dulu baru isi filenya.
#python#testing#plane