API çağrıları yapan kodlar için test yazarken, testlerinizin güvenilir, hızlı ve harici bir servise bağımlı olmamasını sağlamak için bu çağrıları taklit etmek önemlidir. Popüler bir JavaScript test çerçevesi olan Jest, testlerinizde API çağrılarını kolayca taklit etmenin çeşitli yollarını sunar. Kullanabileceğiniz farklı yaklaşımlara dalalım.
Apidog, geliştiricilere tüm API yaşam döngüsü için yüksek kaliteli işlevsellikler sağlayan kapsamlı bir düşük kodlu API platformudur. Otomatik kod oluşturma, CI/CD entegrasyonu ve özelleştirilebilir komut dosyaları gibi ek araçlarla, tek bir platformda profesyonel API geliştirme deneyimi yaşayın!
Apidog hakkında daha fazla bilgi edinmek için aşağıdaki düğmeye tıklayın!
jest.mock() Kullanımı
Jest'te API çağrılarını taklit etmenin bir yolu, API isteğini yapan modülün tamamını taklit etmek için jest.mock()
işlevini kullanmaktır. İşte bir örnek:
// api.js
import axios from 'axios';
export const getUsers = () => {
return axios.get('/users');
};
// api.test.js
import axios from 'axios';
import { getUsers } from './api';
jest.mock('axios');
test('getUsers returns data from API', async () => {
const users = [{ id: 1, name: 'John' }];
axios.get.mockResolvedValueOnce({ data: users });
const result = await getUsers();
expect(axios.get).toHaveBeenCalledWith('/users');
expect(result.data).toEqual(users);
});
Bu örnekte, tüm axios modülünü otomatik olarak taklit etmek için jest.mock('axios')
kullanıyoruz. Ardından, bir sonraki axios.get
çağrısı için yanıtı taklit etmek için axios.get.mockResolvedValueOnce()
kullanıyoruz. Testimiz daha sonra API'nin doğru şekilde çağrıldığını ve taklit edilen verileri döndürdüğünü doğrulayabilir1.
Manuel Taklitleri Kullanma
Başka bir yaklaşım, bir __mocks__
klasörü oluşturarak ve içine bir taklit uygulama dosyası koyarak API çağrısı yapan modülü manuel olarak taklit etmektir:
// __mocks__/axios.js
export default {
get: jest.fn(() => Promise.resolve({ data: {} })),
post: jest.fn(() => Promise.resolve({ data: {} })),
// ...
};
Şimdi testinizde, her test için farklı yanıtları taklit edebilirsiniz:
// api.test.js
import axios from 'axios';
import { getUsers } from './api';
jest.mock('axios');
test('getUsers returns data from API', async () => {
const users = [{ id: 1, name: 'John' }];
axios.get.mockResolvedValueOnce({ data: users });
const result = await getUsers();
expect(axios.get).toHaveBeenCalledWith('/users');
expect(result.data).toEqual(users);
});
Bu manuel taklitle, get
, post
vb. gibi farklı Axios yöntemlerini kendi uygulamalarınızla taklit etme konusunda tam kontrole sahipsiniz2.
Axios-mock-adapter Kullanımı
Axios isteklerini daha gelişmiş bir şekilde taklit etmek için kitaplığı kullanabilirsiniz. İlk olarak, yükleyin:
npm install axios-mock-adapter --save-dev
Ardından testlerinizde:
// api.test.js
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import { getUsers } from './api';
describe('getUsers', () => {
let mock;
beforeAll(() => {
mock = new MockAdapter(axios);
});
afterEach(() => {
mock.reset();
});
test('returns users data', async () => {
const users = [{ id: 1, name: 'John' }];
mock.onGet('/users').reply(200, users);
const result = await getUsers();
expect(result.data).toEqual(users);
});
});
axios-mock-adapter ile, istekleri URL'lere, parametrelere, başlıklara ve daha fazlasına göre taklit edebilirsiniz. Ayrıca hataları ve zaman aşımlarını da simüle edebilirsiniz.
Taklit Edilmiş Bir Axios Örneği Enjekte Etme
Kodunuz doğrudan axios kullanıyorsa, başka bir seçenek, testler sırasında taklit edilmiş bir axios örneğini kodunuza enjekte etmektir:
// api.js
import axios from 'axios';
export const getUsers = () => {
return axios.get('/users');
};
// api.test.js
import axios from 'axios';
import { getUsers } from './api';
jest.mock('axios', () => ({
get: jest.fn(),
}));
test('getUsers returns data from API', async () => {
const users = [{ id: 1, name: 'John' }];
axios.get.mockResolvedValueOnce({ data: users });
const result = await getUsers();
expect(axios.get).toHaveBeenCalledWith('/users');
expect(result.data).toEqual(users);
});
Burada, tüm modülü değil, axios'un kendisini taklit ediyoruz ve kendi taklit edilmiş get
işlevimizi sağlıyoruz.
API Çağrılarını Taklit Etme İpuçları
Jest'te API çağrılarını taklit ederken aklınızda bulundurmanız gereken birkaç ipucu:
- Bağımsız testler sağlamak için
beforeEach
veafterEach
kullanarak testler arasında taklitlerinizi sıfırlayın - Çok fazla taklit etmeyin - kodunuzun gerçekten kullandığı işlevleri ve modülleri taklit edin
- Hataları ve beklenmedik yanıtları taklit ederek başarısızlık durumlarını da test edin
- Yaygın API yanıtları için yeniden kullanılabilir taklit yapıları oluşturmayı düşünün
Apidog ile API'leri Taklit Edin
Farklı bir API geliştirme deneyimi denemek isterseniz, Apidog'u kullanmayı düşünebilirsiniz!

Apidog, geliştiricilere API'ler geliştirmek için basit ve sezgisel bir kullanıcı arayüzü sağlayan düşük kodlu bir API platformudur. Apidog ile API'ler oluşturabilir, test edebilir, taklit edebilir ve belgeleyebilirsiniz. Apidog'a daha yakından bakalım!
Apidog Akıllı Taklit

Kesin taklit kurallarınız yoksa, Apidog'un manuel yapılandırma olmadan otomatik olarak gerçekçi taklit verileri oluşturmasına izin verin.
Apidog Gelişmiş Taklit

İstemci ve sunucu tarafı arasındaki gerçek yaşam etkileşimlerini simüle etmek için özel komut dosyalarıyla API yanıtlarını değiştirin.
Apidog Bulut Taklidi

Bulut taklit sunucusunda erişilebilen sabit bir adres aracılığıyla ekibinizle bulut taklit özelliğiyle işbirliği yapın.
Sonuç
Taklit, özellikle API çağrıları gibi harici bağımlılıklarla uğraşırken, iyi testler yazmak için temel bir beceridir. Jest, jest.mock()
ile tüm modülleri taklit etmekten, modülleri manuel olarak taklit etmeye, daha gelişmiş durumlar için axios-mock-adapter
gibi kitaplıklar kullanmaya kadar, testlerinizde API çağrılarını taklit etmenin birçok yolunu sunar. Önemli olan, testlerinizi bağımsız tutarken ve API'lerin uygulama ayrıntılarına değil, test edilen koda odaklanırken, ihtiyaçlarınız için doğru yaklaşımı seçmektir. Bu taklit teknikleriyle, API'lere bağlı kod için dayanıklı testler yazabilirsiniz.