import { act, renderHook } from '@testing-library/react';
import { useTimer } from './use-timer';
describe('useTimer', () => {
beforeAll(() => {
jest.useFakeTimers();
});
it('should initialize with 0', () => {
const { result } = renderHook(() => useTimer());
expect(result.current.count).toEqual(0);
});
it('should increase count every second', () => {
const { result } = renderHook(() => useTimer());
for (let i = 1; i <= 10; i++) {
act(() => jest.advanceTimersByTime(1000));
expect(result.current.count).toEqual(i);
}
});
afterAll(() => {
jest.useRealTimers();
});
});
import { useEffect, useState } from 'react';
export const useTimer = () => {
const [count, setCount] = useState(0);
useEffect(() => {
const timer = setInterval(() => {
setCount((prev) => prev + 1);
}, 1000);
return () => clearInterval(timer);
}, []);
return { count };
};