From ec35cce67623568305878a699f7e8daeeaa9866c Mon Sep 17 00:00:00 2001 From: saseungmin Date: Thu, 7 Sep 2023 22:43:08 +0900 Subject: [PATCH] =?UTF-8?q?test:=20react=20package=EC=9D=98=20useIsFirstRe?= =?UTF-8?q?nder,=20useUpdateEffect=20hook=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../react/src/hooks/useIsFirstRender.test.ts | 27 ++++++++++++++ .../react/src/hooks/useUpdateEffect.test.ts | 37 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 packages/react/src/hooks/useIsFirstRender.test.ts create mode 100644 packages/react/src/hooks/useUpdateEffect.test.ts diff --git a/packages/react/src/hooks/useIsFirstRender.test.ts b/packages/react/src/hooks/useIsFirstRender.test.ts new file mode 100644 index 0000000..1ce0c17 --- /dev/null +++ b/packages/react/src/hooks/useIsFirstRender.test.ts @@ -0,0 +1,27 @@ +import { act, renderHook } from '@testing-library/react'; + +import useIsFirstRender from './useIsFirstRender'; + +describe('useIsFirstRender', () => { + const useIsFirstRenderHook = () => renderHook(useIsFirstRender); + + context('첫 렌더링인 경우', () => { + it('true를 반환해야만 한다', () => { + const { result } = useIsFirstRenderHook(); + + expect(result.current).toBe(true); + }); + }); + + context('첫 렌더링이 아닌 경우', () => { + it('false를 반환해야만 한다', () => { + const { result, rerender } = useIsFirstRenderHook(); + + act(() => { + rerender(); + }); + + expect(result.current).toBe(false); + }); + }); +}); diff --git a/packages/react/src/hooks/useUpdateEffect.test.ts b/packages/react/src/hooks/useUpdateEffect.test.ts new file mode 100644 index 0000000..d3376d9 --- /dev/null +++ b/packages/react/src/hooks/useUpdateEffect.test.ts @@ -0,0 +1,37 @@ +import { renderHook } from '@testing-library/react'; + +import useIsFirstRender from './useIsFirstRender'; +import useUpdateEffect from './useUpdateEffect'; + +jest.mock('./useIsFirstRender'); + +describe('useUpdateEffect', () => { + const effectCallback = jest.fn(); + + beforeEach(() => { + (useIsFirstRender as jest.Mock).mockImplementation(() => given.isFirstRender); + jest.clearAllMocks(); + }); + + const useUpdateEffectHook = () => renderHook(() => useUpdateEffect(effectCallback, [])); + + context('첫 랜더링인 경우', () => { + given('isFirstRender', () => true); + + it('effect callback 함수는 호출되지 않아만한다', () => { + useUpdateEffectHook(); + + expect(effectCallback).not.toHaveBeenCalled(); + }); + }); + + context('첫 렌더링이 아닌 경우', () => { + given('isFirstRender', () => false); + + it('첫 랜더링이 아닌 경우 effect callback 함수는 호출되어야만 한다', () => { + useUpdateEffectHook(); + + expect(effectCallback).toHaveBeenCalledTimes(1); + }); + }); +});