diff --git a/src/__tests__/useLogger.test.ts b/src/__tests__/useLogger.test.ts new file mode 100644 index 0000000000..85989b9f4c --- /dev/null +++ b/src/__tests__/useLogger.test.ts @@ -0,0 +1,41 @@ +import { renderHook } from '@testing-library/react-hooks'; +import useLogger from '../useLogger'; + +const logSpy = jest.spyOn(global.console, 'log').mockImplementation(() => {}); + +describe('useLogger', () => { + it('should be defined', () => { + expect(useLogger).toBeDefined(); + }); + + it('should log the provided props on mount', () => { + const props = { question: 'What is the meaning?', answer: 42 }; + renderHook(() => useLogger('Test', props)); + + expect(logSpy).toBeCalledTimes(1); + expect(logSpy).toHaveBeenLastCalledWith('Test mounted', props); + }); + + it('should log when the component has unmounted', () => { + const props = { question: 'What is the meaning?', answer: 42 }; + const { unmount } = renderHook(() => useLogger('Test', props)); + + unmount(); + + expect(logSpy).toHaveBeenLastCalledWith('Test unmounted'); + }); + + it('should log updates as props change', () => { + const { rerender } = renderHook( + ({ componentName, props }: { componentName: string; props: any }) => useLogger(componentName, props), + { + initialProps: { componentName: 'Test', props: { one: 1 } }, + } + ); + + const newProps = { one: 1, two: 2 }; + rerender({ componentName: 'Test', props: newProps }); + + expect(logSpy).toHaveBeenLastCalledWith('Test updated', newProps); + }); +});