Apa itu nock? Mocking Permintaan HTTP di Node.js (dengan Alternatif Tanpa Kode)

Apa itu nock npm? Pelajari bagaimana nock melakukan mocking permintaan HTTP dalam pengujian unit Node.js, lengkap dengan contoh kode dan kapan harus menggunakan server mock bersama sebagai gantinya.

Ashley Innocent

Ashley Innocent

24 June 2026

Apa itu nock? Mocking Permintaan HTTP di Node.js (dengan Alternatif Tanpa Kode)

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

Jika pengujian Node.js Anda gagal karena API pihak ketiga tidak berfungsi, lambat, atau terbatas laju (rate-limited), Anda tidak memiliki masalah kode. Anda memiliki masalah dependensi. Solusinya adalah memalsukan (mock) lapisan HTTP agar pengujian unit Anda berjalan dengan cara yang sama setiap saat, dan nock adalah paket npm yang paling sering digunakan pengembang Node. Panduan ini menjelaskan apa itu nock, menunjukkan contoh kecil yang berfungsi, dan membahas di mana server mock bersama lebih cocok daripada intersep dalam proses. Untuk referensi pustaka lengkap, repositori GitHub nock adalah sumber kebenaran.

tombol

Apa itu nock?

nock adalah pustaka ekspektasi dan pemalsuan (mocking) server HTTP untuk Node.js. Ia bekerja dengan menimpa modul http dan https Node pada saat runtime, sehingga setiap permintaan keluar yang dibuat kode Anda dapat diintersep dan dijawab dengan respons yang telah disiapkan. Tidak ada yang meninggalkan mesin Anda. Panggilan jaringan tidak pernah terjadi.

Itu penting untuk pengujian unit. Ketika Anda menguji fungsi yang memanggil API eksternal, Anda tidak ingin memukul layanan nyata. Panggilan nyata lambat, memakan biaya, dapat gagal karena alasan yang tidak terkait dengan kode Anda, dan membuat rangkaian pengujian Anda tidak deterministik. nock memungkinkan Anda mengatakan "ketika kode saya membuat permintaan GET ke URL ini, kembalikan JSON persis ini dengan kode status ini." Pengujian Anda kemudian menegaskan bagaimana fungsi Anda menangani respons tersebut.

nock khusus Node.js. Ia terhubung ke tumpukan HTTP asli, jadi ia bekerja dengan fetch, axios, got, node-fetch, dan apa pun yang dibangun di atas http/https. Ia memiliki jutaan unduhan mingguan dan telah menjadi pilihan default untuk pengujian backend selama bertahun-tahun. Anda menginstalnya sebagai dependensi pengembangan karena hanya berjalan dalam pengujian, tidak pernah dalam produksi.

Contoh nock kecil

Misalnya Anda memiliki fungsi yang mengambil pengguna dari API. Ini fungsinya:

// user-service.js
export async function getUser(id) {
  const res = await fetch(`https://api.example.com/users/${id}`);
  if (!res.ok) throw new Error(`Request failed: ${res.status}`);
  return res.json();
}

Sekarang, ini adalah pengujian yang menggunakan nock untuk mengintersep permintaan:

// user-service.test.js
import nock from 'nock';
import { getUser } from './user-service.js';

test('returns the user when the API responds', async () => {
  nock('https://api.example.com')
    .get('/users/42')
    .reply(200, { id: 42, name: 'Ada Lovelace' });

  const user = await getUser(42);
  expect(user).toEqual({ id: 42, name: 'Ada Lovelace' });
});

Bacalah dari atas ke bawah. nock('https://api.example.com') mengatur host yang ingin Anda intersep. .get('/users/42') mencocokkan metode dan jalur. .reply(200, {...}) mendefinisikan status dan isi untuk dikembalikan. Ketika getUser(42) berjalan, panggilan jaringan nyata diganti dan respons yang telah Anda siapkan kembali.

Anda dapat memalsukan kesalahan dengan cara yang sama, yang merupakan bagian yang sering dilupakan orang untuk diuji:

test('throws when the API returns 500', async () => {
  nock('https://api.example.com')
    .get('/users/99')
    .reply(500);

  await expect(getUser(99)).rejects.toThrow('Request failed: 500');
});

Menguji jalur yang tidak menyenangkan adalah di mana pemalsuan menunjukkan nilainya. Anda tidak dapat secara andal membuat API langsung mengembalikan 500 sesuai permintaan, tetapi Anda dapat memalsukannya dalam satu baris. Jika simulasi kesalahan adalah tujuan utama Anda, panduan ini tentang cara memalsukan respons kesalahan server internal 500 akan membahas lebih dalam.

Fitur nock yang berguna untuk diketahui

Beberapa metode sering muncul setelah Anda melewati dasar-dasar.

Satu kebiasaan yang patut dibangun sejak awal: pastikan semua mock Anda benar-benar digunakan. Panggil scope.done() pada interceptor (atau nock.isDone()) dan pengujian akan gagal jika permintaan yang diharapkan tidak pernah terpicu. Itu mengubah panggilan yang terlewat secara diam-diam menjadi kegagalan yang jelas.

Di mana nock berhenti menjadi alat yang tepat

nock dibangun untuk satu pekerjaan dan melakukannya dengan baik: mengintersep HTTP di dalam satu proses Node selama pengujian otomatis. Begitu kebutuhan Anda melintasi batas proses, model itu mulai tegang.

Inilah keterbatasannya. Mock nock hidup di dalam file pengujian Anda, dalam runtime Anda, dalam bahasa Anda. Pengembang front-end tidak dapat mengarahkan browser mereka ke pengaturan nock Anda. Insinyur seluler tidak dapat memukulnya dari simulator. Tim QA Anda tidak dapat menjalankan pemeriksaan manual terhadapnya. Koleksi Postman tidak dapat mencapainya. Mock hanya ada selama proses Jest atau Mocha Anda berjalan, dan hanya untuk kode dalam proses yang sama itu.

Itu baik untuk pengujian unit dan persis seperti yang dirancang nock. Tetapi banyak situasi nyata membutuhkan mock yang hidup di tempat yang dapat dijangkau semua orang:

Untuk itu, Anda menginginkan server mock, sesuatu yang mendengarkan URL nyata dan mengembalikan respons kepada siapa pun yang memanggilnya. Jika Anda menimbang kedua ide tersebut, server mock vs server nyata dan penjelasan yang lebih luas tentang pemalsuan API keduanya menjelaskan pertukaran tersebut.

nock vs server mock terhosting (Apidog)

Anggap saja sebagai dua lapisan daripada kompetisi. nock menangani intersep dalam kode untuk pengujian unit. Alat seperti Apidog memberi Anda server mock bersama yang didorong skema untuk semua yang terjadi di luar proses pengujian tunggal. Banyak tim menggunakan keduanya.

Apidog menghasilkan server mock langsung dari desain API Anda. Anda mendefinisikan titik akhir dan skemanya, dan Apidog menyajikan respons realistis di URL langsung, dengan aturan mock cerdas yang menghasilkan data yang masuk akal dari nama bidang dan jenis. Tanpa harness pengujian, tanpa pengaturan per pengujian, tanpa keterikatan bahasa. Siapa pun dengan URL mendapatkan respons yang sama.

nock Server mock Apidog
Tempat berjalan Di proses pengujian Node Anda Server terhosting dengan URL nyata
Terbaik untuk Pengujian unit, simulasi kesalahan Integrasi, pengujian manual, kerja lintas tim
Siapa yang dapat mencapainya Kode dalam proses yang sama Klien apa pun dengan URL
Pengaturan Kode di setiap file pengujian Dihasilkan dari skema API Anda
Bahasa Hanya Node.js Klien apa pun, bahasa apa pun
Data realistis Anda menulis setiap respons Mock cerdas dari skema dan nama bidang
Berbagi Tidak dapat dibagikan Dibagikan ke seluruh tim

Agar jelas tentang cakupan: Apidog tidak menggantikan nock di dalam pengujian unit Jest atau Mocha Anda. Jika Anda perlu mengintersep panggilan fetch dalam satu pengujian dan menegaskan hasilnya, nock masih merupakan alat yang tepat. Apidog masuk ketika mock membutuhkan alamat yang dapat dijangkau oleh orang lain dan alat lain. Untuk tampilan langsung dari sisi server, lihat panduan praktis untuk memalsukan API untuk pengujian. Anda dapat mengunduh Apidog dan menjalankan mock dari file OpenAPI yang ada dalam beberapa menit.

Alternatif lain untuk nock

nock bukan satu-satunya pustaka di area ini, dan pilihan yang tepat tergantung pada di mana kode Anda berjalan.

Pertanyaan penentu selalu sama. Apakah Anda menguji logika di dalam satu proses, atau Anda memerlukan API palsu yang hidup di jaringan? nock dan MSW menjawab yang pertama. Server mock terhosting menjawab yang kedua.

Pertanyaan yang Sering Diajukan

Apakah nock gratis?

Ya. nock adalah sumber terbuka di bawah lisensi MIT dan gratis untuk diinstal dari npm. Anda menambahkannya sebagai dependensi pengembangan dan menggunakannya di rangkaian pengujian Anda tanpa biaya.

Apakah nock bekerja dengan fetch dan axios?

Ya. Karena nock mengintersep pada lapisan http/https Node, ia bekerja dengan klien apa pun yang dibangun di atas modul-modul tersebut, termasuk fetch asli, axios, got, dan node-fetch. Anda menulis interceptor yang sama terlepas dari mana yang digunakan kode Anda.

Bisakah saya menggunakan nock di browser?

Tidak. nock khusus Node.js karena ia menambal modul HTTP Node, yang tidak ada di browser. Untuk pemalsuan sisi browser, gunakan MSW atau arahkan front end Anda ke server mock terhosting. Ikhtisar tentang API mock di JavaScript ini menjelaskan opsi browser.

Apa perbedaan antara nock dan server mock?

nock mengintersep permintaan di dalam proses pengujian Anda dan tidak pernah membuka port nyata. Server mock mendengarkan URL aktual yang dapat dipanggil oleh klien mana pun. Gunakan nock untuk pengujian unit; gunakan server mock ketika front end, QA, atau tim lain perlu mencapai respons palsu yang sama.

Kesimpulan

nock adalah pilihan yang dapat diandalkan untuk pemalsuan HTTP dalam pengujian unit Node.js. Ia mengintersep permintaan keluar dalam proses, mengembalikan respons yang Anda definisikan, dan membuat rangkaian pengujian Anda cepat dan deterministik, termasuk jalur kesalahan yang tidak dapat Anda picu terhadap API langsung. Terus gunakan itu untuk tujuan tersebut.

Ketika mock perlu meninggalkan file pengujian Anda, ketika front end, QA, atau tim lain harus memukul titik akhir yang sama, gunakanlah server mock bersama. Apidog menghasilkannya dari skema API Anda dan menyajikan data realistis di URL langsung, sehingga semua orang membangun berdasarkan kontrak yang sama sebelum backend siap. Unduh Apidog dan ubah spesifikasi OpenAPI Anda menjadi mock yang berfungsi dalam hitungan menit.

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.