Skip to content

Commit

Permalink
test: init use-request test case
Browse files Browse the repository at this point in the history
  • Loading branch information
brickspert committed Feb 1, 2020
1 parent 97482e0 commit c228ca2
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 15 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"@types/lodash.isequal": "^4.5.5",
"@types/lodash.throttle": "^4.1.6",
"babel-plugin-import": "^1.12.0",
"create-test-server": "^3.0.1",
"del": "^5.1.0",
"enzyme": "^3.10.0",
"father": "^2.13.3",
Expand Down
67 changes: 67 additions & 0 deletions packages/use-request/src/__tests__/failed.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import createTestServer from 'create-test-server';
import { extend } from 'umi-request';
import { renderHook } from '@testing-library/react-hooks';
import useRequest from '../index';

const request = extend({
errorHandler(e) {
throw e;
},
});

describe('normal request', () => {
let server;

beforeAll(async () => {
server = await createTestServer();
});

afterAll(() => {
server.close();
});

const prefix = api => `${server.url}${api}`;

// TODO fix this test case
test.skip('http failed with reqeust', async () => {
const rawData = {
text: 'testtext',
};
server.get('/test/failed1', (req, res) => {
res.status(500);
res.send(rawData);
});

const { result, waitForNextUpdate } = renderHook(() =>
useRequest(() => request(prefix('/test/failed1')), {
requestMehod: request,
}),
);
await waitForNextUpdate(() => result.current.error);
expect(result.current.error.message).toEqual('http error');
});

test('http failed with custom request', async () => {
const { result, waitForNextUpdate } = renderHook(() =>
useRequest(() => {
throw new Error('test error');
}),
);
await waitForNextUpdate(() => result.current.error);
expect(result.current.error.message).toEqual('test error');
});

test('http failed with url', async () => {
const rawData = {
text: 'testtext',
};
server.get('/test/failed3', (req, res) => {
res.status(500);
res.send(rawData);
});

const { result, waitForNextUpdate } = renderHook(() => useRequest(prefix('/test/failed3')));
await waitForNextUpdate(() => result.current.error);
expect(result.current.error.message).toEqual('http error');
});
});
7 changes: 0 additions & 7 deletions packages/use-request/src/__tests__/index.test.ts

This file was deleted.

50 changes: 50 additions & 0 deletions packages/use-request/src/__tests__/normal.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import createTestServer from 'create-test-server';
import request from 'umi-request';
import { renderHook } from '@testing-library/react-hooks';
import useRequest from '../index';

describe('normal request', () => {
let server;

beforeAll(async () => {
server = await createTestServer();
});

afterAll(() => {
server.close();
});

const prefix = api => `${server.url}${api}`;

test('success with service', async () => {
const rawData = {
text: 'testtext',
};
server.get('/test/success', (req, res) => {
res.send(rawData);
});

const { result, waitForNextUpdate } = renderHook(() =>
useRequest(() => request(prefix('/test/success'))),
);
await waitForNextUpdate(() => result.current.data);
expect(result.current.data).toEqual({
text: 'testtext',
});
});

test('success with url', async () => {
const rawData = {
text: 'testtext',
};
server.get('/test/success2', (req, res) => {
res.send(rawData);
});

const { result, waitForNextUpdate } = renderHook(() => useRequest(prefix('/test/success')));
await waitForNextUpdate(() => result.current.data);
expect(result.current.data).toEqual({
text: 'testtext',
});
});
});
12 changes: 4 additions & 8 deletions packages/use-request/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ function useRequest<R = any, Item = any, U extends Item = any>(
): PaginatedResult<Item>

function useRequest(service: any, options: any = {}) {

const contextConfig = useContext(ConfigContext);
const finalOptions = { ...contextConfig, ...options };

Expand Down Expand Up @@ -62,8 +61,7 @@ function useRequest(service: any, options: any = {}) {
const { url, ...rest } = service;
promiseService = () => finalRequestMehod(url, rest);
} else {
promiseService = (...args: any[]) => {
return new Promise((resolve) => {
promiseService = (...args: any[]) => new Promise(resolve => {
const result = service(...args);
if (result.then) {
result.then((data: any) => resolve(data))
Expand All @@ -78,17 +76,15 @@ function useRequest(service: any, options: any = {}) {
request(url, rest).then((data: any) => { resolve(data) });
}
}
})
};
});
}

if (loadMore) {
return useLoadMore(promiseService, finalOptions);
} else if (paginated) {
} if (paginated) {
return usePaginated(promiseService, finalOptions);
} else {
return useAsync(promiseService, finalOptions);
}
return useAsync(promiseService, finalOptions);
}

const UseAPIProvider = ConfigContext.Provider;
Expand Down
4 changes: 4 additions & 0 deletions packages/use-request/src/useAsync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ class Fetch<R, P extends any[]> {
mutate(data: any) {
if (typeof data === 'function') {
this.setState({
// eslint-disable-next-line react/no-access-state-in-setstate
data: data(this.state.data) || {}
});
} else {
Expand Down Expand Up @@ -279,6 +280,7 @@ function useAsync<R, P extends any[], U, UU extends U = any>(

let formatResult: any;
if ('formatResult' in _options) {
// eslint-disable-next-line prefer-destructuring
formatResult = _options.formatResult;
}
const formatResultPersist = usePersistFn(formatResult);
Expand All @@ -299,6 +301,7 @@ function useAsync<R, P extends any[], U, UU extends U = any>(

const subscribe = usePersistFn((key: string, data: any) => {
setFeches(s => {
// eslint-disable-next-line no-param-reassign
s[key] = data;
return { ...s };
});
Expand Down Expand Up @@ -357,6 +360,7 @@ function useAsync<R, P extends any[], U, UU extends U = any>(
);
currentFetch = newFetch.state;
setFeches(s => {
// eslint-disable-next-line no-param-reassign
s[currentFetchKey] = currentFetch;
return { ...s };
});
Expand Down

0 comments on commit c228ca2

Please sign in to comment.