Skip to content

Commit 2ba3d0d

Browse files
authored
Merge pull request #214 from str0yka/test-useHover
[test]: useHover
2 parents c0da930 + 702239e commit 2ba3d0d

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

src/hooks/useHover/useHover.test.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import { act, renderHook } from '@testing-library/react';
2+
3+
import { useHover } from './useHover';
4+
5+
it('Should use hover', () => {
6+
const onEntry = vi.fn();
7+
const onLeave = vi.fn();
8+
9+
const { result } = renderHook(() => useHover({ onEntry, onLeave }));
10+
11+
expect(result.current[0]).toEqual({ current: undefined });
12+
expect(result.current[1]).toBeFalsy();
13+
expect(onEntry).not.toBeCalled();
14+
expect(onLeave).not.toBeCalled();
15+
});
16+
17+
it('Should change state when entering and leaving the element', () => {
18+
const element = document.createElement('div');
19+
const onEntry = vi.fn();
20+
const onLeave = vi.fn();
21+
22+
const { result } = renderHook(() => useHover(element, { onEntry, onLeave }));
23+
24+
expect(result.current).toBeFalsy();
25+
expect(onEntry).not.toBeCalled();
26+
expect(onLeave).not.toBeCalled();
27+
28+
act(() => element.dispatchEvent(new Event('mouseenter')));
29+
expect(result.current).toBeTruthy();
30+
expect(onEntry).toBeCalledTimes(1);
31+
expect(onLeave).not.toBeCalled();
32+
33+
act(() => element.dispatchEvent(new Event('mouseleave')));
34+
expect(result.current).toBeFalsy();
35+
expect(onEntry).toBeCalledTimes(1);
36+
expect(onLeave).toBeCalledTimes(1);
37+
});
38+
39+
it('Should change state when entering and leaving the ref', () => {
40+
const element = document.createElement('div');
41+
const ref = { current: element };
42+
const onEntry = vi.fn();
43+
const onLeave = vi.fn();
44+
45+
const { result } = renderHook(() => useHover(ref, { onEntry, onLeave }));
46+
47+
expect(result.current).toBeFalsy();
48+
expect(onEntry).not.toBeCalled();
49+
expect(onLeave).not.toBeCalled();
50+
51+
act(() => element.dispatchEvent(new Event('mouseenter')));
52+
expect(result.current).toBeTruthy();
53+
expect(onEntry).toBeCalledTimes(1);
54+
expect(onLeave).not.toBeCalled();
55+
56+
act(() => element.dispatchEvent(new Event('mouseleave')));
57+
expect(result.current).toBeFalsy();
58+
expect(onEntry).toBeCalledTimes(1);
59+
expect(onLeave).toBeCalledTimes(1);
60+
});
61+
62+
it('Should change state when entering', () => {
63+
const element = document.createElement('div');
64+
const callback = vi.fn();
65+
66+
const { result } = renderHook(() => useHover(element, callback));
67+
68+
expect(result.current).toBeFalsy();
69+
expect(callback).not.toBeCalled();
70+
71+
act(() => element.dispatchEvent(new Event('mouseenter')));
72+
expect(result.current).toBeTruthy();
73+
expect(callback).toBeCalledTimes(1);
74+
75+
act(() => element.dispatchEvent(new Event('mouseleave')));
76+
expect(result.current).toBeFalsy();
77+
expect(callback).toBeCalledTimes(1);
78+
});

0 commit comments

Comments
 (0)