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:
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ıf | Uygular |
|---|---|
NoopInterceptor | Dört HttpInterceptor hook'unun tamamı — her değeri değiştirmeden döndürür |
NoopObserver | Tüm HttpAdapterObserver hook'ları — boş metodlar |
NoopCircuitBreakerObserver | Tüm CircuitBreakerObserver hook'ları — boş metodlar |
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:
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:
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ı
| Spy | Kaydedilen diziler |
|---|---|
SpyInterceptor | requestCalls, responseCalls, responseValidatedCalls, errorCalls |
SpyObserver | requestStartCalls, 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 SpyObserver'ı MockHttpAdapter ile birlikte kullanmak.
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);