mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-02 19:00:37 +08:00
94 lines
1.9 KiB
TypeScript
94 lines
1.9 KiB
TypeScript
import { act, renderHook } from '@testing-library/react';
|
|
|
|
import useInterval from './useInterval';
|
|
|
|
jest.useFakeTimers();
|
|
|
|
describe('useInterval', () => {
|
|
test('calls the callback with a given delay', () => {
|
|
const callback = jest.fn();
|
|
const delay = 1000;
|
|
|
|
renderHook(() => useInterval(callback, delay));
|
|
|
|
expect(callback).toHaveBeenCalledTimes(0);
|
|
|
|
act(() => {
|
|
jest.advanceTimersByTime(delay);
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalledTimes(1);
|
|
|
|
act(() => {
|
|
jest.advanceTimersByTime(delay);
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalledTimes(2);
|
|
});
|
|
|
|
test('does not call the callback if not enabled', () => {
|
|
const callback = jest.fn();
|
|
const delay = 1000;
|
|
const enabled = false;
|
|
|
|
renderHook(() => useInterval(callback, delay, enabled));
|
|
|
|
act(() => {
|
|
jest.advanceTimersByTime(delay);
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalledTimes(0);
|
|
});
|
|
|
|
test('cleans up the interval when unmounted', () => {
|
|
const callback = jest.fn();
|
|
const delay = 1000;
|
|
|
|
const { unmount } = renderHook(() => useInterval(callback, delay));
|
|
|
|
act(() => {
|
|
jest.advanceTimersByTime(delay);
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalledTimes(1);
|
|
|
|
unmount();
|
|
|
|
act(() => {
|
|
jest.advanceTimersByTime(delay);
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test('updates the interval when delay changes', () => {
|
|
const callback = jest.fn();
|
|
const initialDelay = 1000;
|
|
const newDelay = 2000;
|
|
|
|
const { rerender } = renderHook(({ delay }) => useInterval(callback, delay), {
|
|
initialProps: { delay: initialDelay },
|
|
});
|
|
|
|
act(() => {
|
|
jest.advanceTimersByTime(initialDelay);
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalledTimes(1);
|
|
|
|
rerender({ delay: newDelay });
|
|
|
|
act(() => {
|
|
jest.advanceTimersByTime(initialDelay);
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalledTimes(1);
|
|
|
|
act(() => {
|
|
jest.advanceTimersByTime(newDelay - initialDelay);
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalledTimes(2);
|
|
});
|
|
});
|