Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Pengujian Perangkat Lunak

Pelajaran 14 dari 15

TDD, test double, dan test JavaScript

Test di JavaScript tanpa pustaka

Setelah pelajaran ini kamu bisa menulis test JavaScript sebagai fungsi yang melempar galat, membandingkan larik dengan benar, menguji fungsi yang harus melempar, dan memahami kenapa console.assert tidak menghentikan program.

±14 menitDiperiksa 3 Okt 2026

Materi

JavaScript tidak punya pernyataan assert, tetapi bentuk test-nya sama: panggil fungsi, bandingkan dengan hasil harapan, laporkan bila berbeda. Pelaksana test bawaan Node.js, node:test, memakai aturan sederhana untuk test sinkron: fungsi test dianggap gagal bila ia melempar exception, dan lulus bila tidak. Aturan itu bisa dipakai tanpa pustaka apa pun. Test adalah fungsi yang menjalankan throw new Error(...) ketika hasilnya menyimpang.

function samaDengan(dapat, harap, label) {
  if (JSON.stringify(dapat) !== JSON.stringify(harap)) {
    throw new Error(label + ": dapat " + JSON.stringify(dapat) + ", harap " + JSON.stringify(harap));
  }
}

function ujiLuas(luas) {
  samaDengan(luas(4, 5), 20, "ruang 4 x 5");
  samaDengan(luas(3, 0), 0, "lebar nol");
}

ujiLuas((p, l) => p * l);   // diam: lulus

Untuk angka dan teks, === membandingkan nilai. Untuk larik dan objek, === membandingkan identitas: [1, 2] === [1, 2] bernilai false, karena keduanya dua objek berbeda walaupun isinya sama. Itu sebabnya helper di atas membandingkan hasil JSON.stringify, yang mengubah isi larik menjadi teks. Cara itu cukup untuk angka, teks, larik, dan objek sederhana, dengan dua catatan: objek yang sama isinya tetapi berbeda urutan kuncinya dianggap tidak sama, dan undefined di dalam larik berubah menjadi null.

Fungsi yang harus melempar galat diuji dengan arah terbalik: panggil di dalam try, catat bila exception muncul, dan lempar galat sendiri bila tidak muncul.

function ujiAkar(akar) {
  samaDengan(akar(9), 3, "akar 9");
  let melempar = false;
  try {
    akar(-1);
  } catch (e) {
    melempar = true;
  }
  if (!melempar) throw new Error("akar(-1) harus melempar galat");
}

console.assert(kondisi, pesan) tampak seperti assert, tetapi MDN menjelaskan perilakunya: bila kondisinya salah, pesan galat ditulis ke konsol; bila benar, tidak terjadi apa-apa. Program tidak berhenti dan tidak ada exception, sehingga pelaksana test tidak tahu ada yang gagal. Di proyek Node.js, node:assert menyediakan assert.strictEqual, assert.deepStrictEqual untuk larik dan objek, dan assert.throws; node:test mengelompokkan test dan menjalankannya dengan perintah node --test.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Baris console.assert(total === 15000, "total salah") dijalankan ketika total bernilai 12000. Apa yang terjadi?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke