37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
|
|
import { describe, expect, it, vi } from 'vitest';
|
||
|
|
|
||
|
|
import { motionDelay, prefersReducedMotion } from '@/lib/motion';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Доступность: при `prefers-reduced-motion: reduce` анимации мгновенные,
|
||
|
|
* поэтому и задержка удаления узлов из DOM должна быть нулевой.
|
||
|
|
*/
|
||
|
|
describe('prefers-reduced-motion', () => {
|
||
|
|
it('без поддержки matchMedia считает, что анимации разрешены', () => {
|
||
|
|
vi.stubGlobal('matchMedia', undefined);
|
||
|
|
|
||
|
|
expect(prefersReducedMotion()).toBe(false);
|
||
|
|
expect(motionDelay(140)).toBe(140);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('при reduce анимации не ждут', () => {
|
||
|
|
vi.stubGlobal(
|
||
|
|
'matchMedia',
|
||
|
|
vi.fn(() => ({ matches: true })),
|
||
|
|
);
|
||
|
|
|
||
|
|
expect(prefersReducedMotion()).toBe(true);
|
||
|
|
expect(motionDelay(140)).toBe(0);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('при обычных настройках возвращает исходную задержку', () => {
|
||
|
|
vi.stubGlobal(
|
||
|
|
'matchMedia',
|
||
|
|
vi.fn(() => ({ matches: false })),
|
||
|
|
);
|
||
|
|
|
||
|
|
expect(prefersReducedMotion()).toBe(false);
|
||
|
|
expect(motionDelay(140)).toBe(140);
|
||
|
|
});
|
||
|
|
});
|