import http from 'http'; import { restQuery } from './restQuery'; let server: http.Server; beforeEach((done) => { let retryOnce = false; server = http.createServer(function (request, response) { if (request.url === '/test/restQuery/normal') { response.write(JSON.stringify({ code: 0 })); } if (request.url === '/test/restQuery/retry') { response.write(JSON.stringify({ code: retryOnce ? 0 : 1 })); retryOnce = true; } if (request.url === '/test/restQuery/retryFail') { response.write(JSON.stringify({ code: 1 })); } if (request.url === '/test/network/error') { response.statusCode = 500; response.end(); return; } if (request.url === '/test/custom/statusCodeField') { response.write( JSON.stringify({ status: '1', message: 'OK', result: { status: '' } }), ); } response.statusCode = 200; response.end(); }); server.listen(8086).on('listening', done); }); afterEach((done) => { server && server.close(done); }); describe('test restQuery', () => { it('Normal request', async () => { const data = await restQuery<{ code: number }>({ url: 'http://localhost:8086/test/restQuery/normal', }); expect(data.code).toEqual(0); }); it('Retry request', async () => { const data = await restQuery({ url: 'http://localhost:8086/test/restQuery/retry', supportRetry: true, }); expect(data.code).toEqual(0); }); it('Request times exceeded', async () => { try { await restQuery({ url: 'http://localhost:8086/test/restQuery/retryFail', supportRetry: true, }); } catch (error) { expect(error).toEqual( 'http://localhost:8086/test/restQuery/retryFail 重试请求次数超过上限,请检查参数', ); } }, 10000); it('network error', async () => { try { await restQuery({ url: 'http://localhost:8086/test/network/error', supportRetry: true, }); } catch (error) { expect(error).toEqual( 'http://localhost:8086/test/network/error 重试请求次数超过上限,请检查参数', ); } }, 10000); it('custom verify field', async () => { const data = await restQuery({ url: 'http://localhost:8086/test/custom/statusCodeField', supportRetry: true, statusCodeField: 'status', successCode: '1', }); expect(data.status).toBe('1'); }); it('setData to global', async () => { const url = 'http://localhost:8086/test/restQuery/normal'; const data = await restQuery<{ code: number }>({ url, cache: true, }); const cacheData = await restQuery<{ code: number }>({ url, cache: true, clearCache: false, }); expect(data).toEqual(cacheData); expect(cacheData).toEqual((globalThis as any)[url]); }); });