আমার একটি এপিআই পরিষেবা আছে যেখানে আমার কাছে API গুলিতে কল করার জন্য বিভিন্ন পদ্ধতি রয়েছে। আমি সমস্ত জিইটি অনুরোধ সফলভাবে পরীক্ষা করেছি তবে পোস্টের অনুরোধগুলি পরীক্ষা করতে আমার সমস্যা হচ্ছে।
এই পদ্ধতি:
export default class ApiService {
static makeApiCall = <T>(
url: string,
oneCb: <T>(d: Data) => T,
secondCb: (d: T) => void,
errorCb?: (a: ErrorModel) => void,
method = 'get',
data = {},
): Promise<void> => {
const config: AxiosRequestConfig = {};
if (method === 'post') {
config.headers = header;
return ApiClient.post(url, data, config)
.then(res => callback(normalizeCallback(res.data))).catch(error => someHandler(error));
} else {
return ApiClient.get(url)
.then(res => callback(normalizeCallback(res.data))).catch(error => someHandler(error));
}
};
// ONLY ONE POST METHOD TO MAKE IT MORE CLEAR
static someArchiveMethod = (
callback: (a: SuccessModel) => void,
errorCallback: (error: ErrorModel) => void,
cardId: string
): Promise<void> => {
return ApiService.makeApiCall<SuccessfulResponse>(
'appreciationCard/archive',
Normalizer.successfulResponse,
callback,
errorCallback,
'post',
{ cardId }
);
};
// HERE BELOW THE GET METHODS
static getPeople = (cb: (a: PeopleModel[]) => void, page?: number, limit?: number): Promise<void> => {
const queryDetails = { page, limit };
return ApiService.makeApiCall<PeopleModel[]>(
`people?${toQueryString(queryDetails)}`,
Normalizer.normalizePeople,
callback
);
};
};
জিইটি সম্পর্কিত সমস্ত কিছু আমি এইভাবে পরীক্ষা করছি:
describe('apiService', () => {
beforeAll(() => {
expect(ApiClient.defaults.headers.common.Authorization).toBe('Bearer test token');
// @ts-ignore
ApiClient.get.mockImplementation((url: string) => {
return Promise.resolve({ data: mockData });
});
});
it('should call api client method', () => {
ApiService.makeApiCall(
'testUrl',
data => data,
res => res,
err => err,
'get'
);
expect(ApiClient.get).toBeCalledTimes(1);
expect(ApiClient.get).toBeCalledWith('testUrl');
});
it('should call callbacks consequently', done => {
ApiService.makeApiCall('testUrl', firstCallback, secondCallback).then(() => {
expect(firstCallback).toBeCalledTimes(1);
expect(firstCallback).toBeCalledWith(mockData);
expect(secondCallback).toBeCalledTimes(1);
expect(secondCallback).toBeCalledWith(firstCallback(mockData));
done();
});
});
});
describe('api service error flow', () => {
beforeAll(() => {
// @ts-ignore
ApiClient.get.mockImplementation((url: string) => {
console.log('error result');
return Promise.reject(mockError);
});
});
it('should handle error', done => {
console.error = jest.fn();
const firstCallback = jest.fn((data: any) => data);
const secondCallback = jest.fn((data: any) => data);
ApiService.makeApiCall('testUrl', firstCallback, secondCallback).then(() => {
expect(firstCallback).toBeCalledTimes(0);
expect(secondCallback).toBeCalledTimes(0);
expect(console.error).toBeCalledTimes(1);
expect(console.error).toBeCalledWith('ApiClient testUrl', mockError);
done();
});
});
});
describe('apiService methods', () => {
beforeAll(() => {
ApiClient.get.mockImplementation((url: string) => {
expect(ApiClient.defaults.headers.common.Authorization).toBe('Bearer test token');
return Promise.resolve({ data: mockData });
});
});
it('getPeople method call with one param', () => {
ApiService.getPeople(jest.fn(), 1, 1).then(() => {
expect(ApiClient.get).toBeCalledWith('people?page=1&limit=1');
});
});
})
আমি ভেবেছিলাম যে শুধুমাত্র দৃষ্টান্ত সব পরিবর্তন করে ApiClient.get
থেকে ApiClient.post
তা পোস্ট অনুরোধ পরীক্ষা করার জন্য কাজ করবে। কিন্তু আমি যখন এটি করার চেষ্টা করি তখন তা বলে can not read mockImplementation of undefined
। post
পরমকে ওভাররাইট করার জন্য পরীক্ষাগুলিতে প্যারামটি ব্যবহার করার পদ্ধতিগুলি পরিবর্তন করার চেষ্টা করেছি method = 'get'
তবে আমার কোনও সাফল্য নেই, আমি এই ত্রুটি পেয়েছি
TypeError: apiClient_1.default.post কোনও ফাংশন নয়
কোন চিন্তা?
return ApiClient.post(url, data, config) .then(res => callback(normalizeCallback(res.data))).catch(error => someHandler(error));
এবং আমি যখন কোনও পোস্টের অনুরোধ করার চেষ্টা করি তখন এটি সঠিকভাবে কাজ করে। আমি বলতে চাইছি আমার কাছে 17 টি পোস্ট অনুরোধ রয়েছে যাতে তারা অবশ্যই কাজ করে। তাহলে কেন পরীক্ষায় কাজ হয় না?
get
পরীক্ষার মতো আমিও একই চেষ্টা করেছি কিন্তু আমি সমস্ত উদাহরণ পরিবর্তন get
করে post
পরিবর্তে সেট করেছি set
ApiClient
পদ্ধতি নেইpost
।