123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- import axios from 'axios';
- import MockAdapter from 'axios-mock-adapter';
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
- import { RequestClient } from './request-client';
- describe('requestClient', () => {
- let mock: MockAdapter;
- let requestClient: RequestClient;
- beforeEach(() => {
- mock = new MockAdapter(axios);
- requestClient = new RequestClient();
- });
- afterEach(() => {
- mock.reset();
- });
- it('should successfully make a GET request', async () => {
- mock.onGet('test/url').reply(200, { data: 'response' });
- const response = await requestClient.get('test/url');
- expect(response.data).toEqual({ data: 'response' });
- });
- it('should successfully make a POST request', async () => {
- const postData = { key: 'value' };
- const mockData = { data: 'response' };
- mock.onPost('/test/post', postData).reply(200, mockData);
- const response = await requestClient.post('/test/post', postData);
- expect(response.data).toEqual(mockData);
- });
- it('should successfully make a PUT request', async () => {
- const putData = { key: 'updatedValue' };
- const mockData = { data: 'updated response' };
- mock.onPut('/test/put', putData).reply(200, mockData);
- const response = await requestClient.put('/test/put', putData);
- expect(response.data).toEqual(mockData);
- });
- it('should successfully make a DELETE request', async () => {
- const mockData = { data: 'delete response' };
- mock.onDelete('/test/delete').reply(200, mockData);
- const response = await requestClient.delete('/test/delete');
- expect(response.data).toEqual(mockData);
- });
- it('should return different response types', async () => {
- const mockData = { code: 0, msg: 'ok', data: 'response' };
- mock.onGet('/test/diff').reply(200, mockData);
- const responseRaw = await requestClient.get('/test/diff', {
- responseReturn: 'raw',
- });
- expect(responseRaw.status).toBe(200);
- expect(responseRaw.data).toEqual(mockData);
- const responseBody = await requestClient.get('/test/diff', {
- responseReturn: 'body',
- });
- expect(responseBody.code).toEqual(mockData.code);
- expect(responseBody.msg).toEqual(mockData.msg);
- expect(responseBody.data).toEqual(mockData.data);
- const responseData = await requestClient.get('/test/diff', {
- responseReturn: 'data',
- });
- expect(responseData).toEqual(mockData.data);
- });
- it('should handle network errors', async () => {
- mock.onGet('/test/error').networkError();
- try {
- await requestClient.get('/test/error');
- expect(true).toBe(false);
- } catch (error: any) {
- expect(error.isAxiosError).toBe(true);
- expect(error.message).toBe('Network Error');
- }
- });
- it('should handle timeout', async () => {
- mock.onGet('/test/timeout').timeout();
- try {
- await requestClient.get('/test/timeout');
- expect(true).toBe(false);
- } catch (error: any) {
- expect(error.isAxiosError).toBe(true);
- expect(error.code).toBe('ECONNABORTED');
- }
- });
- it('should successfully upload a file', async () => {
- const fileData = new Blob(['file contents'], { type: 'text/plain' });
- mock.onPost('/test/upload').reply((config) => {
- return config.data instanceof FormData && config.data.has('file')
- ? [200, { data: 'file uploaded' }]
- : [400, { error: 'Bad Request' }];
- });
- const response = await requestClient.upload('/test/upload', {
- file: fileData,
- });
- expect(response.data).toEqual({ data: 'file uploaded' });
- });
- it('should successfully download a file as a blob', async () => {
- const mockFileContent = new Blob(['mock file content'], {
- type: 'text/plain',
- });
- mock.onGet('/test/download').reply(200, mockFileContent);
- const res = await requestClient.download('/test/download');
- expect(res.data).toBeInstanceOf(Blob);
- });
- });
|