Section Testing membangun uji unit pertama dengan node:test, menambah asersi, mock, coverage, lalu mengintroduksi Playwright untuk lapisan end-to-end. Saat kita mulai menulis uji sendiri, pertanyaan berulang muncul: opsi apa saja yang diterima test()? Bagaimana melewatkan satu uji tanpa menghapusnya? Bagaimana menunggu elemen muncul di halaman? Jawabannya selalu bermula dari tempat yang sama: dokumentasi resmi alatnya.
Chapter ini memetakan empat dokumentasi pengujian utama, membuktikan satu klaim dokumentasi node:test dengan eksperimen kecil, dan menutup section Sumber Belajar dengan tabel kapan merujuk yang mana.
Empat Dokumentasi, Empat Lapisan #
| Alat | Dokumentasi resmi | Perannya |
|---|---|---|
| node:test | https://nodejs.org/api/test.html | Test runner bawaan Node; dipakai untuk unit dan integration test di section Testing |
| Vitest | https://vitest.dev/ | Test runner berbasis Vite; pilihan umum untuk proyek framework modern |
| Playwright | https://playwright.dev/ | Otomasi browser untuk uji end-to-end pada aplikasi sungguhan |
| Testing Library | https://testing-library.com/ | Keluarga library untuk menguji UI dari sudut pandang pengguna |
Keempatnya berdiri di lapisan yang berbeda. node:test dan Vitest adalah test runner — keduanya menjalankan uji dan melaporkan hasil. Playwright mengendalikan browser nyata. Testing Library bukan runner dan bukan browser: ia menyediakan cara memilih elemen UI sebagaimana pengguna menemukannya — lewat teks yang tampil, lewat role — dan dirancang berjalan di atas runner beserta DOM environment. Di course ini, peran DOM environment itu diisi jsdom.
Runner-nya pun bersaudara. Vitest sengaja meniru API node:test: test(), describe(), expect dengan bentuk yang mirip, sehingga uji yang ditulis dengan node:test mudah dibaca ulang di proyek Vitest dan sebaliknya. Yang berbeda terutama wilayah kerjanya: Vitest dirancang untuk proyek berbasis Vite dengan watch mode dan fitur kenyamanan tambahan, sedangkan node:test tersedia tanpa satu pun dependensi.
Membaca Dokumentasi node:test #
Halaman https://nodejs.org/api/test.html
adalah daftar API lengkap runner bawaan: test(), describe(), it(), hooks, dan opsi per test. Salah satu klaimnya: sebuah test menerima opsi { skip }, dan alasan lewatnya boleh berupa string.
Klaim docs paling cepat menempel kalau segera diuji. Eksperimennya: dua test biasa ditambah satu test yang dilewati dengan alasan tertentu; keluaran node --test harus memperlihatkan uji yang dilewati beserta alasannya.
// dok-ujian.test.mjs — uji pertama yang mengikuti dokumentasi node:test
// Jalankan di terminal: node --test dok-ujian.test.mjs
import { test } from "node:test";
import assert from "node:assert/strict";
function formatRupiah(angka) {
return `Rp${angka}`;
}
test("formatRupiah menambahkan awalan Rp", () => {
assert.strictEqual(formatRupiah(15000), "Rp15000");
});
test("formatRupiah menangani nol", () => {
assert.strictEqual(formatRupiah(0), "Rp0");
});
test("formatRupiah membulatkan sen", { skip: "fitur sen belum dibutuhkan" }, () => {
assert.strictEqual(formatRupiah(15000.5), "Rp15001");
});Jalankan dengan test runner bawaan Node:
node --test dok-ujian.test.mjsOutput yang Dihasilkan:
✔ formatRupiah menambahkan awalan Rp (0.684335ms)
✔ formatRupiah menangani nol (0.116814ms)
﹣ formatRupiah membulatkan sen (0.073936ms) # fitur sen belum dibutuhkan
ℹ tests 3
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 57.971093Angka milidetik mengukur waktu eksekusi dan akan berbeda di setiap mesin; yang harus cocok adalah tanda ✔/﹣ dan ringkasan di bawahnya. Mari kita telaah ujinya:
- Baris 3–4 (
import { test } ...): docs memuat dua modul yang berpasangan —node:testuntuk runner dannode:assert/strictuntuk asersi — perpaduan yang dipakai di seluruh section Testing. - Baris 10–16 (dua test pertama): test biasa tanpa opsi. Keduanya lolos dan ditandai
✔pada dua baris pertama keluaran. - Baris 18–22 (
{ skip: "fitur sen belum dibutuhkan" }): opsi skip menerima string sebagai alasan. Runner mencetak﹣alih-alih✔, lalu menuliskan alasannya setelah tanda#— persis seperti dijanjikan dokumentasi. - Ringkasan (
pass 2,skipped 1): dua lolos, satu dilewati. Uji yang dilewati dihitung sebagai “tidak gagal”, sehingga rangkaian tetap hijau sambil mencatat pekerjaan yang belum selesai.
Kapan Merujuk yang Mana #
Dokumentasi alat paling berguna bila tahu kapan membukanya. Tabel berikut memetakan pertanyaan yang muncul saat menulis uji ke rujukan resminya:
| Pertanyaan yang muncul | Rujukan resmi |
|---|---|
“Opsi apa yang diterima test()? Bagaimana hooks dan subtest?” | Dokumentasi node:test |
| “Runner untuk proyek Vite/framework; mocking modul; watch mode” | Dokumentasi Vitest |
| “Cara menunggu elemen; locator; menjalankan beberapa browser” | Dokumentasi Playwright |
| “Cara memilih elemen UI agar uji tidak mudah pecah” | Dokumentasi Testing Library |
| “Unit vs integration vs E2E; menyusun strategi pengujian” | Section Testing pada course ini |
Satu kebiasaan membedakan docs dari tutorial: docs selalu terkait versi. Dokumentasi Node menyediakan pemilih versi di halamannya — cocokkan dengan node --version sebelum mengikuti contoh. Docs Vitest dan Playwright juga menandai bagian yang berubah antar versi besar, jadi luangkan waktu sejenak memeriksa versi alat terpasang sebelum menyalin konfigurasi.
Dalam satu proyek nyata, keempat dokumentasi itu biasanya dipakai bergantian, bukan memilih salah satu: runner menjalankan uji unit dan integration setiap kali kode disimpan, uji Playwright dijalankan terpisah karena lebih berat, dan Testing Library dipasang di atas runner yang sudah dipilih untuk lapisan UI. Memahami peran masing-masing membuat pertanyaan “kenapa uji ini tidak jalan” cepat diarahkan ke dokumen yang tepat.
Kebiasaan Membaca Docs Alat #
- Mulai dari halaman Getting Started. Panduan awal alat biasanya cukup untuk uji pertama yang benar-benar berjalan.
- Pilih pintu sesuai yang diketahui. Sudah tahu nama API-nya? Buka API reference. Tahu tujuannya tetapi tidak namanya? Cari di panduan (guide).
- Jalankan contoh dari docs. Dokumentasi alat modern menyertakan contoh yang bisa disalin; coba di proyek kecil sebelum dipakai di kode utama — cara yang sama dengan eksperimen
uji-slice.jspada chapter MDN. - Cocokkan versi. Docs versi lama menjelaskan API yang mungkin sudah berubah; pastikan versi docs dan versi alat yang terpasang sejajar.
Section Sumber Belajar sampai di sini tuntas: MDN untuk dokumen harian, ECMA-262 untuk jaminan bahasa, alat kompatibilitas untuk keputusan fitur, pohon Reference untuk kamus, dan dokumentasi testing untuk kualitas kode. Keempat-empatnya akan kembali dipakai saat membangun proyek di bagian akhir course ini — dan jauh setelahnya, karena kebiasaan merujuk sumber resmi bertahan lebih lama daripada versi alat mana pun.