मेरे पास एक एपीआई सेवा है जहां मेरे पास एपीआई को कॉल करने के लिए अलग-अलग तरीके हैं। मैंने GET के सभी अनुरोधों का सफलतापूर्वक परीक्षण किया है, लेकिन मुझे POST अनुरोधों के परीक्षण में परेशानी हो रही है।
यह विधि है:
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
);
};
};
यह मैं GET से संबंधित हर चीज का परीक्षण कर रहा हूं:
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
दिया।
ApiClient
विधि नहीं हैpost
।