nock Nedir? Node.js HTTP İsteklerini Mocklama ve Kodsuz Alternatif

nock npm nedir? nock'un Node.js birim testlerinde HTTP isteklerini bir kod örneğiyle nasıl taklit ettiğini ve bunun yerine ne zaman paylaşılan bir taklit sunucusu kullanmak gerektiğini öğrenin.

Ashley Innocent

Ashley Innocent

24 June 2026

nock Nedir? Node.js HTTP İsteklerini Mocklama ve Kodsuz Alternatif

Kurumsal İçin Apidog

Şirket İçi (On-Premises) Dağıtım

SSO ve RBAC

SOC 2 Uyumlu

Apidog Enterprise'ı Keşfedin

Node.js testleriniz üçüncü taraf bir API'nin kapalı olması, yavaş olması veya hız sınırlaması nedeniyle başarısız oluyorsa, bir kod sorununuz yoktur. Bir bağımlılık sorununuz vardır. Çözüm, birim testlerinizin her seferinde aynı şekilde çalışması için HTTP katmanını taklit etmektir ve nock çoğu Node geliştiricisinin başvurduğu npm paketidir. Bu kılavuz nock'un ne olduğunu açıklar, küçük bir çalışma örneği gösterir ve paylaşılan bir sahte sunucunun süreç içi kesmenin yerine nerede daha iyi oturduğunu anlatır. Kütüphanenin tam referansı için nock GitHub deposu doğru bilgi kaynağıdır.

düğme

nock Nedir?

nock, Node.js için bir HTTP sunucusu taklit etme ve beklenti kütüphanesidir. Node'un http ve https modüllerini çalışma zamanında geçersiz kılarak çalışır, böylece kodunuzun yaptığı herhangi bir giden istek kesilebilir ve önceden hazırlanmış bir yanıtla cevaplanabilir. Makinenizden hiçbir şey ayrılmaz. Ağ çağrısı asla gerçekleşmez.

Bu, birim testleri için önemlidir. Harici bir API'yi çağıran bir fonksiyonu test ettiğinizde, gerçek hizmete ulaşmak istemezsiniz. Gerçek çağrılar yavaştır, maliyetlidir, kodunuzla ilgisi olmayan nedenlerle başarısız olabilirler ve test paketinizin deterministik olmamasına neden olurlar. nock size "kodum bu URL'ye bir GET isteği yaptığında, bu durum koduyla bu tam JSON'u döndür" demenizi sağlar. Testiniz daha sonra fonksiyonunuzun bu yanıtı nasıl işlediğini doğrular.

nock yalnızca Node.js içindir. Yerel HTTP yığınına bağlanır, bu nedenle fetch, axios, got, node-fetch ve http/https üzerine inşa edilmiş diğer her şeyle çalışır. Milyonlarca haftalık indirme sayısına sahiptir ve yıllardır arka uç testi için varsayılan bir seçenek olmuştur. Yalnızca testlerde çalıştığı, asla üretimde çalışmadığı için bir geliştirme bağımlılığı olarak yüklersiniz.

Küçük Bir nock Örneği

Bir API'den kullanıcı getiren bir fonksiyonunuz olduğunu varsayalım. Fonksiyon şöyledir:

// 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();
}

Şimdi isteği yakalamak için nock kullanan bir test örneği:

// 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' });
});

Yukarıdan aşağıya okuyun. nock('https://api.example.com') kesmek istediğiniz ana bilgisayarı ayarlar. .get('/users/42') yöntemi ve yolu eşleştirir. .reply(200, {...}) döndürülecek durumu ve gövdeyi tanımlar. getUser(42) çalıştığında, gerçek ağ çağrısı değiştirilir ve bunun yerine önceden hazırlanmış yanıtınız geri gelir.

Hataları da aynı şekilde taklit edebilirsiniz, ki bu genellikle insanların test etmeyi unuttuğu kısımdır:

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');
});

Başarısız senaryoları test etmek, taklit etmenin asıl değerini gösterdiği yerdir. Gerçek bir API'nin isteğe bağlı olarak 500 hatası döndürmesini sağlayamazsınız, ancak tek bir satırda bunu taklit edebilirsiniz. Hata simülasyonu ana hedefinizse, 500 dahili sunucu hatası yanıtını nasıl taklit edeceğinize dair bu açıklama daha derinlemesine bilgi verir.

Bilmeniz Gereken Yararlı nock Özellikleri

Temelleri aştıktan sonra sürekli karşınıza çıkan birkaç yöntem bulunmaktadır.

Erken edinilmesi gereken bir alışkanlık: tüm taklitlerinizin gerçekten kullanıldığını doğrulayın. Bir interceptor üzerinde scope.done() çağrısı yapın (veya nock.isDone()) ve beklenen bir istek hiç tetiklenmezse test başarısız olur. Bu, sessizce kaçırılan bir çağrıyı yüksek sesli bir hataya dönüştürür.

nock'un Doğru Araç Olmaktan Çıktığı Noktalar

nock tek bir iş için inşa edilmiştir ve bu işi iyi yapar: otomatik testler sırasında tek bir Node süreci içinde HTTP'yi kesmek. İhtiyaçlarınız bir süreç sınırını aştığı anda, bu model zorlanmaya başlar.

İşte sınırlama. nock taklitleri test dosyanızda, çalışma zamanınızda, dilinizde yaşar. Bir ön uç geliştiricisi tarayıcısını nock kurulumunuza yönlendiremez. Bir mobil mühendis simülatörden ona erişemez. QA ekibiniz ona karşı manuel kontroller yapamaz. Bir Postman koleksiyonu ona ulaşamaz. Taklit, yalnızca Jest veya Mocha süreciniz çalışırken ve yalnızca aynı süreçteki kod için mevcuttur.

Bu, birim testleri için uygundur ve nock tam olarak bunun için tasarlanmıştır. Ancak birçok gerçek durumda, herkesin ulaşabileceği bir yerde yaşayan bir taklide ihtiyaç duyulur:

Bunlar için, gerçek bir URL üzerinde dinleyen ve onu çağıran herkese yanıtlar döndüren bir taklit sunucu istersiniz. İki fikri değerlendiriyorsanız, taklit sunucuya karşı gerçek sunucu ve API taklidi üzerine daha geniş açıklayıcı makale, her ikisi de değiş tokuşları ortaya koyar.

nock vs Barındırılan bir Taklit Sunucu (Apidog)

Bunu bir rekabetten ziyade iki katman olarak düşünün. nock, birim testleri için kod içi kesmeyi yönetir. Apidog gibi bir araç, tek bir test sürecinin dışında gerçekleşen her şey için size paylaşılan, şema tabanlı bir taklit sunucu sağlar. Birçok ekip ikisini de kullanır.

Apidog, API tasarımınızdan doğrudan bir taklit sunucu oluşturur. Bir uç nokta ve şemasını tanımlarsınız ve Apidog, alan adları ve türlerinden makul veriler üreten akıllı taklit kuralları ile gerçekçi yanıtları canlı bir URL'de sunar. Test donanımı yok, test başına kurulum yok, dil kısıtlaması yok. URL'ye sahip herkes aynı yanıtları alır.

nock Apidog taklit sunucusu
Nerede çalışır Node test sürecinizde Gerçek URL'ye sahip barındırılan sunucu
En iyisi ne için Birim testleri, hata simülasyonu Entegrasyon, manuel test, ekipler arası çalışma
Kimler erişebilir Aynı süreçteki kod URL'ye sahip herhangi bir istemci
Kurulum Her test dosyasındaki kod API şemanızdan oluşturulur
Diller Yalnızca Node.js Herhangi bir istemci, herhangi bir dil
Gerçekçi veri Her yanıtı siz yazarsınız Şema ve alan adlarından akıllı taklit
Paylaşım Paylaşılamaz Tüm ekiple paylaşılır

Kapsam hakkında açık olmak gerekirse: Apidog, Jest veya Mocha birim testlerinizdeki nock'u değiştirmez. Tek bir testte bir fetch çağrısını kesmeniz ve sonucu doğrulamanız gerekiyorsa, nock hala doğru araçtır. Apidog, taklidin diğer insanların ve diğer araçların erişebileceği bir adrese ihtiyaç duyduğu durumlarda devreye girer. Sunucu tarafına uygulamalı bir bakış için, API testleri için taklit etme kılavuzuna bakın. Apidog'u indirebilir ve mevcut bir OpenAPI dosyasından birkaç dakika içinde bir taklit oluşturabilirsiniz.

nock'a Diğer Alternatifler

nock bu alandaki tek kütüphane değildir ve doğru seçim kodunuzun nerede çalıştığına bağlıdır.

Belirleyici soru her zaman aynıdır. Bir süreç içindeki mantığı mı test ediyorsunuz, yoksa ağda yaşayan sahte bir API'ye mi ihtiyacınız var? nock ve MSW birinciyi yanıtlar. Barındırılan bir taklit sunucu ise ikinciyi yanıtlar.

Sıkça Sorulan Sorular

nock ücretsiz mi?

Evet. nock, MIT lisansı altında açık kaynaklıdır ve npm'den ücretsiz olarak yüklenebilir. Onu bir geliştirme bağımlılığı olarak ekler ve test paketinizde ücretsiz olarak kullanırsınız.

nock, fetch ve axios ile çalışır mı?

Evet. nock, Node'un http/https katmanında kesme yaptığı için, yerel fetch, axios, got ve node-fetch dahil olmak üzere bu modüllerin üzerine inşa edilmiş herhangi bir istemciyle çalışır. Kodunuzun hangisini kullandığına bakılmaksızın aynı interceptor'ı yazarsınız.

nock'u tarayıcıda kullanabilir miyim?

Hayır. nock yalnızca Node.js içindir çünkü Node'un tarayıcıda bulunmayan HTTP modüllerini yamalar. Tarayıcı tarafı taklit için MSW kullanın veya ön ucunuzu barındırılan bir taklit sunucusuna yönlendirin. JavaScript'teki taklit API'leri üzerine bu genel bakış, tarayıcı seçeneklerini açıklar.

nock ile taklit sunucu arasındaki fark nedir?

nock, test sürecinizin içindeki istekleri keser ve asla gerçek bir port açmaz. Bir taklit sunucu ise herhangi bir istemcinin çağırabileceği gerçek bir URL üzerinde dinler. Birim testleri için nock kullanın; ön uç, QA veya diğer ekiplerin aynı sahte yanıtlara ulaşması gerektiğinde bir taklit sunucu kullanın.

Özet

nock, Node.js birim testlerinde HTTP taklit etme için güvenilir bir seçimdir. Süreç içi giden istekleri keser, tanımladığınız yanıtları döndürür ve canlı bir API'ye karşı tetikleyemeyeceğiniz hata yolları dahil olmak üzere test paketinizin hızlı ve deterministik olmasını sağlar. Bunun için kullanmaya devam edin.

Taklidin test dosyanızdan ayrılması gerektiğinde, ön ucun, QA'nın veya başka bir ekibin aynı uç noktaya erişmesi gerektiğinde, bunun yerine paylaşılan bir taklit sunucusuna başvurun. Apidog, API şemanızdan birini oluşturur ve canlı bir URL'de gerçekçi veriler sunar, böylece arka uç hazır olmadan önce herkes aynı sözleşmeye karşı geliştirme yapar. Apidog'u indirin ve OpenAPI spesifikasyonunuzu dakikalar içinde çalışan bir taklit haline getirin.

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin