Skip to content

Commit 0c7e6ff

Browse files
committed
Add tests for mockViewportForTestGroup
1 parent a3af835 commit 0c7e6ff

File tree

3 files changed

+58
-29
lines changed

3 files changed

+58
-29
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ it('loads the image when the component is in the viewport', () => {
8686

8787
expect(screen.queryByAltText('alt text')).not.toBeInTheDocument();
8888

89-
// when the component's root node is in the viewport - show the image
89+
// when the component's observed node is in the viewport - show the image
9090
act(() => {
9191
intersectionObserver.enterNode(container.firstChild);
9292
});

src/mocks/intersection-observer.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ function mockIntersectionObserver() {
121121

122122
trigger(index);
123123
},
124+
cleanup: () => {
125+
window.IntersectionObserver = savedImplementation;
126+
},
124127
};
125128
}
126129

test/viewport.test.tsx

Lines changed: 54 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,81 @@ import React from 'react';
22
import { render, act, screen } from '@testing-library/react';
33
import '@testing-library/jest-dom/extend-expect';
44

5-
import { mockViewport } from '../src/mocks/viewport';
5+
import { mockViewport, mockViewportForTestGroup } from '../src/mocks/viewport';
66

77
import CustomUseMedia from '../example/viewport/custom-use-media/CustomUseMedia';
88

99
const VIEWPORT_DESKTOP = { width: '1440px', height: '900px' };
1010
const VIEWPORT_MOBILE = { width: '320px', height: '568px' };
1111

12-
describe('It renders correctly on server, desktop and mobile', () => {
13-
it('works on the server', () => {
14-
render(<CustomUseMedia />);
12+
describe('mockViewport', () => {
13+
describe('It renders correctly on server, desktop and mobile', () => {
14+
it('works on the server', () => {
15+
render(<CustomUseMedia />);
1516

16-
expect(screen.getByText('server')).toBeInTheDocument();
17-
});
17+
expect(screen.getByText('server')).toBeInTheDocument();
18+
});
1819

19-
it('works on desktop', () => {
20-
const viewport = mockViewport(VIEWPORT_DESKTOP);
20+
it('works on desktop', () => {
21+
const viewport = mockViewport(VIEWPORT_DESKTOP);
2122

22-
render(<CustomUseMedia />);
23+
render(<CustomUseMedia />);
2324

24-
expect(screen.getByText('desktop')).toBeInTheDocument();
25+
expect(screen.getByText('desktop')).toBeInTheDocument();
2526

26-
viewport.cleanup();
27-
});
27+
viewport.cleanup();
28+
});
2829

29-
it('works on mobile', () => {
30-
const viewport = mockViewport(VIEWPORT_MOBILE);
30+
it('works on mobile', () => {
31+
const viewport = mockViewport(VIEWPORT_MOBILE);
3132

32-
render(<CustomUseMedia />);
33+
render(<CustomUseMedia />);
3334

34-
expect(screen.getByText('not desktop')).toBeInTheDocument();
35+
expect(screen.getByText('not desktop')).toBeInTheDocument();
3536

36-
viewport.cleanup();
37-
});
37+
viewport.cleanup();
38+
});
39+
40+
it('works on desktop and mobile, even if we change the viewport description', () => {
41+
const viewport = mockViewport(VIEWPORT_DESKTOP);
3842

39-
it('works on desktop and mobile, even if we change the viewport description', () => {
40-
const viewport = mockViewport(VIEWPORT_DESKTOP);
43+
render(<CustomUseMedia />);
4144

42-
render(<CustomUseMedia />);
45+
expect(screen.getByText('desktop')).toBeInTheDocument();
46+
expect(screen.queryByText('not desktop')).not.toBeInTheDocument();
4347

44-
expect(screen.getByText('desktop')).toBeInTheDocument();
45-
expect(screen.queryByText('not desktop')).not.toBeInTheDocument();
48+
act(() => {
49+
viewport.set(VIEWPORT_MOBILE);
50+
});
4651

47-
act(() => {
48-
viewport.set(VIEWPORT_MOBILE);
52+
expect(screen.getByText('not desktop')).toBeInTheDocument();
53+
expect(screen.queryByText('desktop')).not.toBeInTheDocument();
54+
55+
viewport.cleanup();
4956
});
57+
});
58+
});
59+
60+
describe('mockViewportForTestGroup', () => {
61+
describe('Desktop', () => {
62+
mockViewportForTestGroup(VIEWPORT_DESKTOP);
63+
64+
it('works on desktop and mobile, even if we change the viewport description', () => {
65+
render(<CustomUseMedia />);
66+
67+
expect(screen.getByText('desktop')).toBeInTheDocument();
68+
expect(screen.queryByText('not desktop')).not.toBeInTheDocument();
69+
});
70+
});
5071

51-
expect(screen.getByText('not desktop')).toBeInTheDocument();
52-
expect(screen.queryByText('desktop')).not.toBeInTheDocument();
72+
describe('Mobile', () => {
73+
mockViewportForTestGroup(VIEWPORT_MOBILE);
5374

54-
viewport.cleanup();
75+
it('works on desktop and mobile, even if we change the viewport description', () => {
76+
render(<CustomUseMedia />);
77+
78+
expect(screen.getByText('not desktop')).toBeInTheDocument();
79+
expect(screen.queryByText('desktop')).not.toBeInTheDocument();
80+
});
5581
});
5682
});

0 commit comments

Comments
 (0)