Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/wojtekmaj/react-hooks. A collection of React Hooks.
hooks react react-hooks
Something went wrong. Try again.
1.8 kB · 53 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354import { beforeEach, describe, expect, it, vi } from 'vitest';import { renderHook } from 'vitest-browser-react';
import useMatchMedia from './useMatchMedia.js';import usePrefersContrast from './usePrefersContrast.js';
vi.mock('/src/useMatchMedia.ts', () => ({ default: vi.fn(),}));
const itIfWindowDefined = it.runIf(typeof window !== 'undefined');const itIfWindowUndefined = it.runIf(typeof window === 'undefined');
describe('usePrefersContrast()', () => { beforeEach(() => { vi.mocked(useMatchMedia).mockReset(); });
itIfWindowDefined('calls useMatchMedia with correct queries', async () => { vi.mocked(useMatchMedia).mockReturnValue(false);
await renderHook(() => usePrefersContrast());
expect(useMatchMedia).toHaveBeenCalledTimes(3); expect(useMatchMedia).toHaveBeenNthCalledWith(1, '(prefers-contrast: more)'); expect(useMatchMedia).toHaveBeenNthCalledWith(2, '(prefers-contrast: less)'); expect(useMatchMedia).toHaveBeenNthCalledWith(3, '(prefers-contrast: custom)'); });
itIfWindowDefined.each` matches | preference ${[true, false, false]} | ${'more'} ${[false, true, false]} | ${'less'} ${[false, false, true]} | ${'custom'} ${[false, false, false]} | ${'no-preference'} `('returns useMatchMedia result properly', async ({ matches, preference }) => { for (const match of matches) { vi.mocked(useMatchMedia).mockReturnValueOnce(match); }
const { result } = await renderHook(() => usePrefersContrast());
expect(result.current).toBe(preference); });
itIfWindowUndefined('should return null', async () => { vi.mocked(useMatchMedia).mockReturnValue(null);
const { result } = await renderHook(() => usePrefersContrast());
expect(result.current).toBe(null); });});