react-use/tests/createBreakpoint.test.ts
Renovate Bot a27f09fd36
chore: refactoring and rearrangement.
More DRY code. Also move non-hooks to separate directories.

BREAKING CHANGE: all `create*` factories been moved to `factory` subdirectory and in case direct import should be imported like `react-use/esm/factory/createBreakpoint`
BREAKING CHANGE: `comps` directory renamed to `component`
2021-01-30 23:30:26 +03:00

75 lines
1.9 KiB
TypeScript

import { act, renderHook } from '@testing-library/react-hooks';
import createBreakpoint from '../src/factory/createBreakpoint';
const useBreakpointA = createBreakpoint();
const useBreakpointB = createBreakpoint({ mobileM: 350, laptop: 1024, tablet: 768 });
const originalInnerWidth = window.innerWidth;
const changeInnerWidth = value =>
Object.defineProperty(window, 'innerWidth', { writable: true, configurable: true, value });
const revert = () => changeInnerWidth(originalInnerWidth);
describe('createBreakpoint', () => {
test('should use default', () => {
const { result } = renderHook(() => useBreakpointA());
act(() => {
changeInnerWidth(100);
window.dispatchEvent(new Event('resize'));
});
expect(result.current).toBe('tablet');
act(() => {
changeInnerWidth(200);
window.dispatchEvent(new Event('resize'));
});
expect(result.current).toBe('tablet');
act(() => {
changeInnerWidth(1100);
window.dispatchEvent(new Event('resize'));
});
expect(result.current).toBe('laptop');
act(() => {
changeInnerWidth(1500);
window.dispatchEvent(new Event('resize'));
});
expect(result.current).toBe('laptopL');
act(() => {
revert();
});
});
test('should use custom', () => {
const { result } = renderHook(() => useBreakpointB());
act(() => {
changeInnerWidth(100);
window.dispatchEvent(new Event('resize'));
});
expect(result.current).toBe('mobileM');
act(() => {
changeInnerWidth(200);
window.dispatchEvent(new Event('resize'));
});
expect(result.current).toBe('mobileM');
act(() => {
changeInnerWidth(800);
window.dispatchEvent(new Event('resize'));
});
expect(result.current).toBe('tablet');
act(() => {
changeInnerWidth(1100);
window.dispatchEvent(new Event('resize'));
});
expect(result.current).toBe('laptop');
act(() => {
revert();
});
});
});