Skip to content

Commit 8f5a8bf

Browse files
committed
✅ add tests to useAsyncTask
1 parent 6c1ec57 commit 8f5a8bf

5 files changed

Lines changed: 37 additions & 11 deletions

File tree

src/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
export { default as useAsyncTaskLazy } from './useAsyncTaskLazy';
2-
export { default as useImmediateAsyncTask } from './hooks/useImmediateAsyncTask';
2+
export { default as useAsyncTask } from './useAsyncTask/useAsyncTask';
3+
export type { AsyncTaskResult as ImmediateAsyncTask } from './useAsyncTask/useAsyncTask';
4+
export type { default as AsyncTask } from './AsyncTask';
5+
export type { default as AsyncTaskParams } from './AsyncTaskParams';
36
export type { AsyncTaskLazyResult } from './useAsyncTaskLazy';
4-
export type { ImmediateAsyncTask } from './hooks/useImmediateAsyncTask';

src/useAsyncTask/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { default } from './useAsyncTask';
2+
export type { AsyncTaskResult } from './useAsyncTask';
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/** @jest-environment jsdom */
2+
3+
import { act, renderHook } from '@testing-library/react';
4+
import useAsyncTask from './useAsyncTask';
5+
6+
describe('useAsyncTask | integration tests', () => {
7+
it('executes immediatly the task', async () => {
8+
const task = jest.fn(() => Promise.resolve(10));
9+
10+
const { result } = renderHook(() => useAsyncTask(task));
11+
12+
expect(result.current.result).toBe(null);
13+
expect(result.current.pending).toBe(true);
14+
15+
expect(task).toHaveBeenCalledTimes(1);
16+
17+
expect(result.current.result).toBe(null);
18+
expect(result.current.pending).toBe(true);
19+
20+
await act(() => Promise.resolve());
21+
22+
expect(result.current.result).toBe(10);
23+
expect(result.current.pending).toBe(false);
24+
});
25+
});
Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,23 @@ import { useLayoutEffect, useRef } from 'react';
22
import useLazyAsyncTask from '../useAsyncTaskLazy';
33
import type AsyncTask from '../AsyncTask';
44

5-
export type ImmediateAsyncTask<Result> = Readonly<{
5+
export type AsyncTaskResult<Result> = Readonly<{
66
error: Error | null;
77
result: Result | null;
88
pending: boolean;
99
}>;
1010

11-
function useImmediateAsyncTask<Result>(
11+
function useAsyncTask<Result>(
1212
task: AsyncTask<Result>,
13-
): ImmediateAsyncTask<Result> {
13+
): AsyncTaskResult<Result> {
1414
const firstRenderRef = useRef(true);
1515

1616
const { error, result, pending, executeAsyncTask } =
1717
useLazyAsyncTask<Result>();
1818

1919
useLayoutEffect(() => {
20+
firstRenderRef.current = false;
2021
executeAsyncTask(task);
21-
22-
return () => {
23-
firstRenderRef.current = false;
24-
};
2522
}, [task, executeAsyncTask]);
2623

2724
return {
@@ -31,4 +28,4 @@ function useImmediateAsyncTask<Result>(
3128
};
3229
}
3330

34-
export default useImmediateAsyncTask;
31+
export default useAsyncTask;

src/useAsyncTaskLazy/isAbortError.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/** @jest-environment jsdom */
22

3-
import isAbortError from '../isAbortError';
3+
import isAbortError from './isAbortError';
44

55
describe('isAbortError | unit tests', () => {
66
describe("when environment doesn't support DOMException", () => {

0 commit comments

Comments
 (0)