Episode ini membahas pengujian dan pemantauan aplikasi Tailwind: visual regression testing dengan Playwright dan Chromatic, pemantauan performa memakai Lighthouse dan Web Vitals, serta cara mencegah regresi CSS di CI dengan budget bundle dan pemeriksaan otomatis.

Utility class yang salah bisa merusak tampilan tanpa error apa pun — tidak ada exception, tidak ada test yang gagal, hanya pixel yang bergeser. Episode 20 membahas cara menangkap regresi semacam ini: visual regression testing, pemantauan performa, dan gerbang kualitas di CI.
Karena UI berbasis utility sulit diuji dengan assertion biasa, strateginya bergeser ke perbandingan visual dan metrik objektif: screenshot yang dibandingkan pixel demi pixel, budget ukuran CSS, dan metrik Web Vitals yang dipantau terus-menerus.
Playwright bisa mengambil screenshot lalu membandingkannya dengan baseline:
import { test, expect } from "@playwright/test";
test("halaman utama tidak berubah", async ({ page }) => {
await page.goto("/");
await expect(page).toHaveScreenshot("home.png", { maxDiffPixelRatio: 0.02 });
});toHaveScreenshot menyimpan gambar pertama sebagai baseline, lalu membandingkan pada run berikutnya. maxDiffPixelRatio: 0.02 memberi toleransi dua persen pixel berbeda — cukup untuk menekan noise kecil tanpa melewatkan regresi nyata.
Untuk komponen yang sudah punya stories di episode 19, Chromatic membandingkan tangkapan Storybook di cloud. Setiap perubahan class akan muncul sebagai diff visual yang bisa di-review per pixel — alur yang sangat cocok untuk library komponen.
Perlu diingat: pengujian visual hanya sekuat baseline-nya. Baseline yang basi — misalnya tidak diperbarui setelah redesign besar — akan membuat seluruh tim mengejar diff yang menyesatkan. Perbarui baseline secara sadar pada commit yang memang mengubah tampilan, bukan secara otomatis pada setiap run.
Lighthouse mengaudit performa, aksesibilitas, dan praktik terbaik:
npx lighthouse https://example.com --output=html --output-path=report.htmlPerhatikan metrik yang terpengaruh CSS: LCP (waktu elemen terbesar terlihat — dipengaruhi CSS render-blocking), CLS (pergeseran layout — dipengaruhi font dan gambar tanpa dimensi), dan TBT (total blocking time). Untuk memantau terus-menerus, Lighthouse CI menjalankan audit pada setiap commit.
Atur budget ukuran CSS langsung di bundler:
export default {
build: {
cssCodeSplit: true,
chunkSizeWarningLimit: 300,
},
};Dan untuk audit skala penuh, pasang Lighthouse CI:
ci:
budget:
- path: "/*"
resourceSizes:
stylesheet: 100stylesheet: 100 artinya total CSS per halaman maksimal 100KB — melebihi angka ini, CI gagal.
Gabungkan tiga gerbang ke dalam pipeline agar regresi CSS tertangkap sebelum produksi:
toHaveClass dari episode 15.Contoh step CI yang memeriksa ukuran CSS:
size=$(wc -c < dist/output.css)
if [ "$size" -gt 102400 ]; then
echo "CSS terlalu besar: $size bytes" >&2
exit 1
fiwc -c < dist/output.css menghitung byte file CSS, dan script menggagalkan pipeline bila melewati 100KB. Ini floor error yang murah — setiap PR yang membengkak langsung terlihat.
Info
Pilih ambang budget dengan hati-hati. Terlalu ketat membuat tim bolak-balik mengejar angka; terlalu longgar membiarkan pembengkakan. Mulai dari ukuran saat ini, lalu turunkan bertahap beberapa persen per iterasi.
Episode 20 melengkapi gerbang kualitas: visual regression testing dengan Playwright dan Chromatic, pemantauan performa dengan Lighthouse dan Web Vitals, serta budget dan pemeriksaan otomatis yang mencegah regresi CSS masuk ke CI.
Inti yang harus dibawa pulang:
Di episode 21 selanjutnya kita akan membahas migration strategies & large-scale refactors — teknik migrasi incremental dari CSS tradisional, pertimbangan monorepo untuk berbagi config dan token, serta strategi rollback dan pengujian kompatibilitas.