UNPKG

1.98 kBJavaScriptView Raw
1import React from 'react';
2import { render, screen } from '@testing-library/react';
3import '@testing-library/jest-dom';
4import user from '@testing-library/user-event';
5import { UncontrolledCollapse } from '..';
6
7describe('UncontrolledCollapse', () => {
8 let toggler;
9 let togglers;
10
11 beforeEach(() => {
12 document.body.innerHTML = `
13 <div>
14 <button id="toggler">Click Me</button>
15 <button class="toggler">Toggler 1</button>
16 <button class="toggler">Toggler 2</button>
17 </div>`;
18 toggler = document.getElementById('toggler');
19 togglers = document.getElementsByClassName('toggler');
20
21 jest.useFakeTimers();
22 });
23
24 afterEach(() => {
25 jest.clearAllTimers();
26 document.body.innerHTML = '';
27 toggler = null;
28 togglers = null;
29 });
30
31 it('should be a Collapse', () => {
32 render(
33 <UncontrolledCollapse data-testid="collapse" toggler="#toggler">
34 Yo!
35 </UncontrolledCollapse>,
36 );
37
38 expect(screen.getByTestId('collapse')).toHaveClass('collapse');
39 });
40
41 it('should toggle isOpen when toggle is called', async () => {
42 render(
43 <UncontrolledCollapse data-testid="collapse" toggler="#toggler">
44 Yo!
45 </UncontrolledCollapse>,
46 );
47
48 await user.click(screen.getByText(/click me/i));
49 jest.advanceTimersByTime(1000);
50
51 expect(screen.getByTestId('collapse')).toHaveClass('show');
52 });
53
54 it('should toggle for multiple togglers', async () => {
55 render(
56 <UncontrolledCollapse data-testid="collapse" toggler=".toggler">
57 Yo!
58 </UncontrolledCollapse>,
59 );
60
61 expect(screen.getByTestId('collapse')).not.toHaveClass('show');
62
63 await user.click(screen.getByText(/toggler 1/i));
64 jest.advanceTimersByTime(1000);
65 expect(screen.getByTestId('collapse')).toHaveClass('show');
66
67 await user.click(screen.getByText(/toggler 2/i));
68 jest.advanceTimersByTime(1000);
69 expect(screen.getByTestId('collapse')).not.toHaveClass('show');
70 });
71});