Episode ini membahas snapshot testing: konsep perbandingan output serialized, penggunaan toMatchSnapshot, cara memperbarui snapshot dengan aman lewat version control, serta penerapannya untuk React components dan output serialized.

Kadang kalian tidak peduli nilai persis sebuah output — kalian hanya ingin tahu bahwa output itu tidak berubah secara tidak sengaja. Untuk kebutuhan itulah Jest menyediakan snapshot testing: merekam hasil serialized sebuah nilai, lalu membandingkannya pada setiap eksekusi berikutnya.
Episode 7 membahas konsep snapshot testing, penggunaan toMatchSnapshot(), cara memperbarui snapshot dengan aman lewat version control, serta penerapannya untuk React components dan output serialized. Snapshot adalah salah satu fitur khas Jest, tetapi juga yang paling sering disalahpahami — episode ini akan meluruskannya.
Saat pertama kali sebuah test memanggil toMatchSnapshot(), Jest menyimpan representasi teks dari nilai yang diterima ke dalam berkas snapshot. Pada eksekusi berikutnya, Jest membandingkan nilai baru dengan yang tersimpan. Jika berbeda, test gagal dan Jest menampilkan diff antara snapshot lama dan baru.
Snapshot bukan pengganti assertion biasa. Dia adalah jaring pengaman untuk perubahan yang tidak diinginkan: ideal untuk output UI, struktur konfigurasi, pesan error, dan representasi data yang serializable. Untuk logika bisnis, matcher eksplisit seperti toEqual tetap lebih tepat.
Kuncinya adalah meninjau setiap perubahan snapshot melalui code review. Snapshot yang disimpan di Git bisa di-diff seperti kode biasa — inilah yang membuat review menjadi mungkin.
test("konfigurasi aplikasi stabil", () => {
const konfigurasi = {
nama: "aplikasi",
port: 8080,
fitur: ["login", "analitik"],
};
expect(konfigurasi).toMatchSnapshot();
});expect(konfigurasi).toMatchSnapshot() menyimpan representasi objek pada percobaan pertama. Jika ada developer yang menambah fitur baru ke array fitur, test ini akan gagal sampai snapshot diperbarui — persis perilaku yang kita inginkan.
Snapshot disimpan di direktori __snapshots__ yang berdampingan dengan file test, dengan ekstensi .snap. Direktori ini wajib di-commit ke Git agar seluruh tim membandingkan terhadap snapshot yang sama. Jangan tambahkan ke .gitignore.
src/
konfigurasi.test.js
__snapshots__/
konfigurasi.test.js.snapKetika sebuah perubahan memang disengaja, kalian memperbarui snapshot dengan --updateSnapshot:
npx jest --updateSnapshotPerintah npx jest --updateSnapshot menimpa semua snapshot yang gagal dengan nilai baru. Variabel pintas -u melakukan hal yang sama. Aturan emas: jalankan perintah ini hanya setelah kalian memastikan perubahan itu benar, lalu periksa diff snapshot di Git sebelum commit.
Jangan pernah menerima snapshot tanpa melihat isinya. Dalam pull request, selalu baca diff file .snap — apakah hanya menambahkan field yang diharapkan, atau ada regresi yang tersembunyi? Snapshot yang menampilkan objek raksasa sebaiknya dipecah menjadi snapshot yang lebih kecil dan fokus agar mudah ditinjau.
Selain berkas terpisah, Jest mendukung inline snapshot dengan toMatchInlineSnapshot(). Nilai snapshot ditulis langsung ke dalam file test. Cocok untuk snapshot kecil yang ingin dilihat di tempat, tetapi membuat diff lebih berisik.
Snapshot paling populer digunakan untuk React components. Dengan bantuan serializer seperti @testing-library/jest-dom atau renderer yang sesuai, kalian bisa merekam struktur DOM yang dihasilkan komponen:
function Tombol({ label }) {
return <button>{label}</button>;
}
test("Tombol merender label dengan benar", () => {
expect(renderToSnapshot(<Tombol label="Simpan" />)).toMatchSnapshot();
});Pada episode 8 kita akan memakai React Testing Library untuk render nyata. Untuk sekarang, pahami bahwa snapshot komponen menangkap struktur output — jika class atau struktur DOM berubah tak sengaja, test langsung berbunyi.
Snapshot juga berguna untuk output serialized selain DOM: konfigurasi, JSON response, pesan error, atau representasi objek besar. Kuncinya, nilai harus bisa diserialisasi secara konsisten agar perbandingan stabil.
Episode 7 menjelaskan snapshot testing sebagai jaring pengaman perubahan: menyimpan output serialized, membandingkannya setiap kali test berjalan, dan memperbaruinya hanya setelah perubahan disengaja terverifikasi lewat code review.
Inti yang harus dibawa pulang:
toMatchSnapshot() membuat berkas .snap pada percobaan pertama.__snapshots__ wajib di-commit ke Git.npx jest --updateSnapshot, lalu tinjau diff-nya.Di episode 8 selanjutnya kita akan masuk ke testing React & UI components — integrasi dengan React Testing Library, merender komponen dan memeriksa DOM, menguji event, props, perubahan state, dan UI async, serta menggabungkan snapshot testing di React. Pastikan dasar React kalian sudah siap.