testing nodejs jest supertest | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: testing nodejs jest supertest

Sunday, May 31, 2026

testing nodejs jest supertest

Seri Node.js — Artikel 14 dari 16

Pastikan Kode Kamu Benar dengan Testing
Unit & Integration Testing
dengan Jest dan Supertest

Belajar cara menulis tes otomatis di Node.js menggunakan Jest dan Supertest — dari unit test sederhana sampai integration test API yang sesungguhnya.

#TestingNodeJS #Jest #Supertest #NodeJS
⏱️
Estimasi Baca
12 Menit
๐ŸŽฏ
Level
Pemula — Menengah
๐Ÿ“…
Tahun
2025 — 2026

Pernah nggak, kamu udah capek-capek nulis ratusan baris kode Node.js, terus pas dijalankan… boom — error yang nggak kamu sangka. Yang bikin frustasi, bug itu baru ketahuan setelah aplikasi kamu live di production dan dipakai user beneran. Kalau kamu pernah ngalamin ini, berarti kamu butuh banget yang namanya testing Node.js.

Testing bukan cuma buat developer senior. Justru pemula yang baru belajar Node.js harus paham testing dari awal, biar kebiasaan menulis kode yang bisa diandalkan terbentuk sejak dini. Di artikel ini, kita bakal bahas tuntas cara pakai Jest unit test dan Supertest integration test Node.js — dua senjata andalan developer profesional untuk memastikan aplikasi berjalan sebagaimana mestinya.

๐Ÿงช Konsep Kunci

"Testing bukan berarti kamu tidak percaya kodenya. Testing berarti kamu cukup profesional untuk membuktikan kodenya benar."

Unit Test — menguji satu fungsi/unit kecil secara terisolasi.  |  Integration Test — menguji bagaimana banyak komponen bekerja bersama (termasuk HTTP endpoint).

๐Ÿค” Apa Itu Testing dan Kenapa Penting di Node.js?

Bayangkan kamu lagi membangun jembatan. Sebelum jembatan itu dibuka untuk umum, insinyur pasti melakukan serangkaian uji coba: apakah bisa menahan beban sekian ton? Apakah material-nya tahan cuaca? Nah, testing di software prinsipnya persis sama — kamu menguji "jembatan" kodenya sebelum dipakai orang banyak.

Dalam ekosistem testing Node.js, ada dua jenis tes yang paling sering dipakai:

Unit Test vs Integration Test

Aspek Unit Test (Jest) Integration Test (Supertest)
Fokus Satu fungsi / modul kecil Alur lengkap (route → controller → DB)
Kecepatan ⚡ Sangat cepat ๐Ÿข Lebih lambat (buka server/DB)
Tool Utama Jest Supertest + Jest
Cocok untuk Utility, helper, logic murni API endpoint, middleware, auth
Isolasi Ya — pakai mock/spy Tidak sepenuhnya (perlu server)
๐Ÿ”ฅ
Fakta Menarik

Menurut survei Stack Overflow Developer Survey, developer yang menulis automated testing melaporkan kepuasan kerja yang lebih tinggi karena mereka lebih percaya diri saat merilis fitur baru. Testing bukan beban — testing adalah superpowermu.

๐Ÿš€ Mulai dengan Jest: Panduan Unit Test Node.js Step by Step

Jest adalah testing framework buatan Meta (Facebook) yang paling populer di ekosistem JavaScript/Node.js. Ia punya semua yang kamu butuhkan: test runner, assertion library, hingga code coverage — semuanya dalam satu paket. Inilah cara memulai Jest unit test dari nol:

1

Instalasi Jest ke Project Node.js

Pastikan kamu sudah punya project Node.js dengan package.json. Lalu install Jest sebagai dev dependency:

Terminal
npm install --save-dev jest

# Lalu tambahkan script di package.json
"scripts": {
  "test": "jest",
  "test:coverage": "jest --coverage"
}
2

Buat File Fungsi yang Akan Diuji

Buat file src/math.js — fungsi sederhana yang akan kita tes:

src/math.js
// Fungsi helper sederhana
function tambah(a, b) {
  return a + b;
}

function bagi(a, b) {
  if (b === 0) throw new Error('Tidak bisa bagi dengan nol!');
  return a / b;
}

module.exports = { tambah, bagi };
3

Tulis File Test Pertamamu

Buat file src/math.test.js — Jest otomatis mendeteksi file *.test.js:

src/math.test.js
const { tambah, bagi } = require('./math');

// 'describe' mengelompokkan test yang berhubungan
describe('Fungsi Math', () => {

  // 'test' atau 'it' mendefinisikan satu skenario uji
  test('tambah(2, 3) harus mengembalikan 5', () => {
    expect(tambah(2, 3)).toBe(5);
  });

  test('tambah dengan angka negatif', () => {
    expect(tambah(-1, 1)).toBe(0);
  });

  test('bagi dengan nol harus throw Error', () => {
    expect(() => bagi(10, 0)).toThrow('Tidak bisa bagi dengan nol!');
  });

});
4

Jalankan Test

Ketik perintah ini di terminal, dan Jest akan menjalankan semua test:

Terminal
npm test

# Output yang diharapkan:
PASS  src/math.test.js
  Fungsi Math
     tambah(2, 3) harus mengembalikan 5 (3ms)
     tambah dengan angka negatif (1ms)
     bagi dengan nol harus throw Error (2ms)

Tests:       3 passed, 3 total
๐Ÿ’ก
Tips Penamaan Test

Biasakan menulis nama test dengan format "[fungsi] harus [hasil yang diharapkan] ketika [kondisi]". Contoh: "fungsi login harus return token ketika kredensial valid". Test yang deskriptif akan jadi dokumentasi hidup proyekmu!

๐Ÿ”— Integration Test dengan Supertest: Uji API Node.js Secara Nyata

Kalau unit test itu seperti menguji setiap baut dan baut pada mesin secara terpisah, maka Supertest integration test Node.js itu seperti menghidupkan mesinnya dan lihat apakah semua komponen bekerja bersama dengan benar. Supertest memungkinkan kamu membuat request HTTP ke API Express-mu tanpa harus menjalankan server secara manual.

1

Instalasi Supertest

Terminal
npm install --save-dev supertest
2

Pisahkan App dari Server

Ini pola penting! Pisahkan definisi app dari pemanggilan app.listen(). Ini agar Supertest bisa menggunakan app-nya tanpa benar-benar membuka port:

src/app.js (bukan index.js)
const express = require('express');
const app = express();

app.use(express.json());

app.get('/api/users', (req, res) => {
  res.json({ users: [{ id: 1, name: 'Budi' }] });
});

app.post('/api/users', (req, res) => {
  const { name } = req.body;
  if (!name) return res.status(400).json({ error: 'Nama wajib diisi' });
  res.status(201).json({ id: 2, name });
});

module.exports = app; // ← export app, jangan listen di sini!
3

Tulis Integration Test dengan Supertest

src/app.test.js
const request = require('supertest');
const app = require('./app');

describe('GET /api/users', () => {
  test('harus mengembalikan daftar user dengan status 200', async () => {
    const res = await request(app).get('/api/users');
    expect(res.statusCode).toBe(200);
    expect(res.body.users).toHaveLength(1);
    expect(res.body.users[0].name).toBe('Budi');
  });
});

describe('POST /api/users', () => {
  test('harus berhasil membuat user baru', async () => {
    const res = await request(app)
      .post('/api/users')
      .send({ name: 'Siti' });
    expect(res.statusCode).toBe(201);
    expect(res.body.name).toBe('Siti');
  });

  test('harus return 400 jika nama kosong', async () => {
    const res = await request(app)
      .post('/api/users')
      .send({});
    expect(res.statusCode).toBe(400);
    expect(res.body.error).toBeDefined();
  });
});
Insight Penting: async/await di Test

Perhatikan penggunaan async/await di integration test. Karena request HTTP bersifat asynchronous, kamu harus menggunakan async pada callback test dan await sebelum pemanggilan request. Tanpa itu, Jest bisa menganggap test sudah selesai sebelum response datang!

๐Ÿ—‚️ Cheat Sheet Matcher Jest yang Wajib Kamu Hafal

Jest punya puluhan matcher (fungsi seperti toBe, toEqual) untuk memverifikasi hasil. Ini yang paling sering kamu pakai dalam testing Node.js sehari-hari:

Matcher Kegunaan Contoh
.toBe() Perbandingan ketat (===) expect(1+1).toBe(2)
.toEqual() Perbandingan nilai (deep equal) expect({a:1}).toEqual({a:1})
.toBeTruthy() Nilai truthy (tidak null/undefined/0) expect("hello").toBeTruthy()
.toHaveLength() Panjang array atau string expect([1,2]).toHaveLength(2)
.toContain() Array berisi item tertentu expect([1,2,3]).toContain(2)
.toThrow() Fungsi lempar error expect(fn).toThrow('msg')
.toBeDefined() Nilai bukan undefined expect(res.body).toBeDefined()
⚠️
Perhatian: toBe vs toEqual

Jangan gunakan .toBe() untuk membandingkan object atau array! toBe menggunakan referensi memori (===), jadi {a:1} === {a:1} selalu false. Gunakan .toEqual() untuk membandingkan isi object/array.

๐Ÿ’ก
Tips: Cek Coverage Report

Jalankan npm run test:coverage untuk lihat seberapa banyak kodemu yang sudah dicover oleh test. Jest akan menampilkan laporan persentase untuk setiap file. Usahakan coverage minimal 70-80% untuk aplikasi production!

๐Ÿ“š
Bagian dari
Seri Belajar Node.js: Node.js From Zero to Zorro

Artikel ini adalah bagian ke-14 dari 16 artikel dalam seri lengkap belajar Node.js dari nol. Lihat daftar isi lengkap seri ini:

๐Ÿ—บ️
Lihat Daftar Isi Lengkap →
saifiahmada.com • Seri Node.js From Zero to Zorro

Kesimpulan

Menulis test bukan overhead — ini adalah investasi kualitas yang kamu bayar di awal agar tidak bayar mahal di production.

๐Ÿงฉ
Unit Test dengan Jest
Uji setiap fungsi kecil secara terisolasi. Cepat, mudah, dan jadi fondasi testing Node.js yang kuat.
๐Ÿ”—
Integration Test dengan Supertest
Uji API endpoint secara end-to-end tanpa harus jalankan server manual. Supertest integration test Node.js yang andal.
๐Ÿ“Š
Coverage Report
Pantau seberapa banyak kodemu yang tercover. Target minimal 70-80% untuk production yang sehat.

Sekarang giliran kamu! Coba tulis test pertamamu hari ini. Punya pertanyaan, bingung di bagian mana, atau punya pengalaman menarik soal testing? Tulis di kolom komentar ya! Dan kalau artikel ini bermanfaat, share ke teman-teman yang juga lagi belajar Node.js. ๐Ÿš€

๐Ÿ“š Lihat Semua Artikel Seri Node.js
๐Ÿท️ Topik
#BelajarNodeJS #ZeroToZorro #TestingNodeJS #JestUnitTest #Supertest #IntegrationTest #ExpressJS #JavaScript #PemulaCoding
๐Ÿ“˜ Tutorial Testing Node.js • Jest & Supertest • Artikel 14/16

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux