UNPKG

react-haiku

Version:

React Hook & Utility Library

53 lines (52 loc) 1.98 kB
import { renderHook, act } from '@testing-library/react'; import { useNetwork } from '../../hooks/useNetwork'; import { useEventListener } from '../../hooks/useEventListener'; jest.mock('../../hooks/useEventListener', () => ({ useEventListener: jest.fn(), })); describe('useNetwork', () => { const mockNavigator = { onLine: true }; beforeAll(() => { Object.defineProperty(globalThis, 'navigator', { value: mockNavigator, writable: true, }); }); afterEach(() => { jest.resetAllMocks(); }); it('should return true when navigator.onLine is true', () => { mockNavigator.onLine = true; const { result } = renderHook(() => useNetwork()); expect(result.current).toBe(true); }); it('should add event listeners for online and offline', () => { renderHook(() => useNetwork()); expect(useEventListener).toHaveBeenCalledWith('online', expect.any(Function)); expect(useEventListener).toHaveBeenCalledWith('offline', expect.any(Function)); }); it('should default to true when navigator is undefined', () => { Object.defineProperty(globalThis, 'navigator', { value: undefined, writable: true, }); const { result } = renderHook(() => useNetwork()); expect(result.current).toBe(true); }); it('should return false when handleOffline is called', () => { const { result } = renderHook(() => useNetwork()); const handleOffline = useEventListener.mock.calls[1][1]; act(() => { handleOffline(); }); expect(result.current).toBe(false); }); it('should return true when handleOnline is called', () => { const { result } = renderHook(() => useNetwork()); const handleOnline = useEventListener.mock.calls[0][1]; act(() => { handleOnline(); }); expect(result.current).toBe(true); }); });