UNPKG

4.34 kBJavaScriptView Raw
1import React from 'react';
2import { render, screen } from '@testing-library/react';
3import '@testing-library/jest-dom';
4import { Collapse } from '..';
5
6describe('Collapse', () => {
7 beforeEach(() => {
8 jest.useFakeTimers();
9 });
10
11 afterEach(() => {
12 jest.clearAllTimers();
13 });
14
15 it('should render children', () => {
16 render(<Collapse>Hello</Collapse>);
17 expect(screen.getByText(/hello/i)).toBeInTheDocument();
18 });
19
20 it('works with strict mode', () => {
21 const spy = jest.spyOn(console, 'error');
22 render(
23 <React.StrictMode>
24 <Collapse />
25 </React.StrictMode>,
26 );
27 expect(spy).not.toHaveBeenCalled();
28 });
29
30 it('should have default isOpen value as false', () => {
31 render(<Collapse>Hello</Collapse>);
32 expect(screen.getByText(/hello/i)).not.toHaveClass('show');
33 });
34
35 it('should render with class "collapse"', () => {
36 render(<Collapse>Hello</Collapse>);
37 expect(screen.getByText(/hello/i)).toHaveClass('collapse');
38 });
39
40 it('should render with class "collapse-horizontal" if it has prop horizontal', () => {
41 render(<Collapse horizontal>Hello</Collapse>);
42 expect(screen.getByText(/hello/i)).toHaveClass('collapse-horizontal');
43 });
44
45 it('should render with class "navbar-collapse" if it has prop navbar', () => {
46 render(<Collapse navbar>Hello</Collapse>);
47 expect(screen.getByText(/hello/i)).toHaveClass('navbar-collapse');
48 });
49
50 it('should render with class "show" when isOpen is true', () => {
51 render(<Collapse isOpen>Hello</Collapse>);
52 expect(screen.getByText(/hello/i)).toHaveClass('show');
53 });
54
55 it('should set height to null when isOpen is true', () => {
56 render(<Collapse isOpen data-testid="collapse" />);
57 expect(screen.getByTestId('collapse').style.height).toBe('');
58 });
59
60 it('should not set height when isOpen is false', () => {
61 render(<Collapse isOpen={false} data-testid="collapse" />);
62 expect(screen.getByTestId('collapse').style.height).toBe('');
63 });
64
65 it('should forward all styles', () => {
66 render(
67 <Collapse
68 isOpen={false}
69 data-testid="collapse"
70 style={{ backgroundColor: 'black' }}
71 />,
72 );
73 expect(screen.getByTestId('collapse').style.backgroundColor).toBe('black');
74 });
75
76 it('should forward all callbacks', () => {
77 const callbacks = {
78 onEnter: jest.fn(),
79 onEntering: jest.fn(),
80 onEntered: jest.fn(),
81 onExit: jest.fn(),
82 onExiting: jest.fn(),
83 onExited: jest.fn(),
84 };
85 const { rerender } = render(<Collapse isOpen={false} {...callbacks} />);
86 rerender(<Collapse isOpen {...callbacks} />);
87 expect(callbacks.onEnter).toHaveBeenCalled();
88 expect(callbacks.onEntering).toHaveBeenCalled();
89 expect(callbacks.onEntered).not.toHaveBeenCalled();
90 jest.advanceTimersByTime(350);
91 expect(callbacks.onEntered).toHaveBeenCalled();
92 expect(callbacks.onExit).not.toHaveBeenCalled();
93 rerender(<Collapse isOpen={false} {...callbacks} />);
94 expect(callbacks.onExit).toHaveBeenCalled();
95 expect(callbacks.onExiting).toHaveBeenCalled();
96 expect(callbacks.onExited).not.toHaveBeenCalled();
97 jest.advanceTimersByTime(350);
98 expect(callbacks.onExiting).toHaveBeenCalled();
99 expect(callbacks.onExited).toHaveBeenCalled();
100 });
101
102 it('should apply correct bootstrap classes', () => {
103 const { rerender } = render(
104 <Collapse isOpen={false} data-testid="collapse" />,
105 );
106 rerender(<Collapse isOpen data-testid="collapse" />);
107 expect(screen.getByTestId('collapse')).toHaveClass('collapsing');
108 jest.advanceTimersByTime(350);
109 expect(screen.getByTestId('collapse')).toHaveClass('collapse show');
110
111 rerender(<Collapse isOpen={false} data-testid="collapse" />);
112 expect(screen.getByTestId('collapse')).toHaveClass('collapsing');
113 jest.advanceTimersByTime(350);
114 expect(screen.getByTestId('collapse')).toHaveClass('collapse');
115 });
116
117 it('should set inline style to 0 when isOpen change to false and remove after transition', () => {
118 const { rerender } = render(<Collapse isOpen data-testid="collapse" />);
119 rerender(<Collapse isOpen={false} data-testid="collapse" />);
120 expect(screen.getByTestId('collapse').style.height).toBe('0px');
121 jest.advanceTimersByTime(380);
122 expect(screen.getByTestId('collapse').style.height).toBe('');
123 });
124});