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 SpyObserver'ı MockHttpAdapter 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.