Skip to content

Spy'lar, Noop'lar & MockHttpClient

MockHttpAdapter'a ek olarak, testing alt yolu pipeline'ınızın belirli bölümlerini izole olarak test etmek için alt seviyeli yardımcılar sunar.

MockHttpClient

HttpClientContract transport katmanı için alt seviyeli test double'ı. Tam adapter pipeline'ları yerine özel HttpClient sarmalayıcılarını test ederken kullanın.

MockHttpAdapter ile aynı kuyruk API'sini ve assertion yardımcılarını sunar:

typescript
import { MockHttpClient } from '@yildizpay/http-adapter/testing';

const client = new MockHttpClient();
client.mockResolvedValue({ data: { id: 1 }, status: 200, headers: {} });

const result = await client.request(config);

client.assertCalledTimes(1);
client.assertCalledWith({ method: HttpMethod.POST });

Noop Yardımcıları

Herhangi bir yan etki olmadan bir sözleşmeyi karşılayan geçiş uygulamaları. Hook sağlanması gerektiğinde ancak davranışı test kapsamı için önemsiz olduğunda kullanışlıdır.

SınıfUygular
NoopInterceptorDört HttpInterceptor hook'unun tamamı — her değeri değiştirmeden döndürür
NoopObserverTüm HttpAdapterObserver hook'ları — boş metodlar
NoopCircuitBreakerObserverTüm CircuitBreakerObserver hook'ları — boş metodlar
typescript
import {
  NoopInterceptor,
  NoopObserver,
} from '@yildizpay/http-adapter/testing';

const adapter = HttpAdapter.builder()
  .withInterceptor(new NoopInterceptor())
  .withObserver(new NoopObserver())
  .build();

Spy Yardımcıları

Spy yardımcıları her çağrıyı kaydeder ve değerleri değiştirmeden geçirir. Tam istek pipeline'ını mock'lamak zorunda kalmadan bir hook'un çağrıldığını doğrulamak için kullanın.

SpyInterceptor

Dört interceptor hook'una yapılan çağrıları kaydeder:

typescript
import { SpyInterceptor } from '@yildizpay/http-adapter/testing';

const interceptorSpy = new SpyInterceptor();

const adapter = HttpAdapter.builder()
  .withInterceptor(interceptorSpy)
  .build();

await adapter.send(request);

expect(interceptorSpy.requestCalls).toHaveLength(1);
expect(interceptorSpy.responseCalls).toHaveLength(1);
expect(interceptorSpy.errorCalls).toHaveLength(0);

// Testler arasında sıfırla
interceptorSpy.reset();

SpyObserver

Tüm observer hook'larına yapılan çağrıları kaydeder:

typescript
import { SpyObserver } from '@yildizpay/http-adapter/testing';

const observerSpy = new SpyObserver();

const adapter = HttpAdapter.builder()
  .withObserver(observerSpy)
  .build();

await adapter.send(request);

expect(observerSpy.requestStartCalls).toHaveLength(1);
expect(observerSpy.successCalls[0].durationMs).toBeGreaterThan(0);
expect(observerSpy.failureCalls).toHaveLength(0);
expect(observerSpy.retryCalls).toHaveLength(0);

observerSpy.reset();

Kaydedilen Diziler Referansı

SpyKaydedilen diziler
SpyInterceptorrequestCalls, responseCalls, responseValidatedCalls, errorCalls
SpyObserverrequestStartCalls, successCalls, failureCalls, retryCalls

Hepsini Birleştirme

Entegrasyon testlerinde yaygın bir desen: tam pipeline'ın doğru çalıştığını doğrulamak için SpyInterceptor ve SpyObserverMockHttpAdapter ile birlikte kullanmak.

typescript
import {
  MockHttpAdapter,
  SpyInterceptor,
  SpyObserver,
} from '@yildizpay/http-adapter/testing';

const adapter = new MockHttpAdapter();
const interceptorSpy = new SpyInterceptor();
const observerSpy = new SpyObserver();

// Spy'ları mock transport'u saran gerçek bir adapter'a bağla
const sarmalanmisAdapter = HttpAdapter.builder()
  .withHttpClient(adapter)         // mock transport'u enjekte et
  .withInterceptor(interceptorSpy)
  .withObserver(observerSpy)
  .build();

adapter.mockResolvedValue({ id: 'siparis_1' });

await sarmalanmisAdapter.send(request);

// Tam pipeline'ın çalıştığını doğrula
expect(interceptorSpy.requestCalls).toHaveLength(1);
expect(interceptorSpy.responseCalls).toHaveLength(1);
expect(observerSpy.successCalls).toHaveLength(1);

Released under the MIT License.