Skip to content

Commit bc45324

Browse files
authored
Merge pull request #134 from coreui/dev-testing
test: coverage
2 parents 1cff070 + 310fa60 commit bc45324

21 files changed

+310
-165
lines changed

package.json

+10-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"start": "react-scripts start",
4545
"build": "react-scripts build",
4646
"test": "react-scripts test",
47+
"test:cov": "react-scripts test --coverage",
4748
"test:debug": "react-scripts --inspect-brk test --runInBand",
4849
"eject": "react-scripts eject"
4950
},
@@ -58,5 +59,13 @@
5859
"not dead",
5960
"not ie <= 9",
6061
"not op_mini all"
61-
]
62+
],
63+
"jest": {
64+
"collectCoverageFrom": [
65+
"src/**/*.{js,jsx}",
66+
"!**/*index.js",
67+
"!src/serviceWorker.js",
68+
"!src/polyfill.js"
69+
]
70+
}
6271
}

src/App.test.js

+7-18
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,9 @@
1-
// import React from 'react';
2-
// import ReactDOM from 'react-dom';
3-
// import App from './App';
4-
//
5-
// jest.mock('react-chartjs-2', () => ({
6-
// Line: () => null,
7-
// Polar: () => null,
8-
// Pie: () => null,
9-
// Radar: () => null,
10-
// Bar: () => null,
11-
// Doughnut: () => null,
12-
// }));
1+
import React from 'react';
2+
import {shallow} from 'enzyme/build';
3+
import App from './App';
134

14-
// it('renders without crashing', () => {
15-
// const div = document.createElement('div');
16-
// ReactDOM.render(<App />, div);
17-
// ReactDOM.unmountComponentAtNode(div);
18-
// });
195

20-
it('', () => {})
6+
it('mounts without crashing', () => {
7+
const wrapper = shallow(<App />);
8+
wrapper.unmount()
9+
});
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
3+
import { MemoryRouter } from 'react-router-dom';
34
import DefaultHeader from '../DefaultHeader';
45

56
it('renders without crashing', () => {
67
const div = document.createElement('div');
7-
ReactDOM.render(<DefaultHeader />, div);
8+
ReactDOM.render(<MemoryRouter><DefaultHeader /></MemoryRouter>, div);
89
ReactDOM.unmountComponentAtNode(div);
910
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import {MemoryRouter, Route} from 'react-router-dom';
4+
import DefaultLayout from '../DefaultLayout';
5+
6+
it('renders without crashing', () => {
7+
const div = document.createElement('div');
8+
ReactDOM.render(<MemoryRouter><Route path="/" name="Home" component={DefaultLayout} /></MemoryRouter>, div);
9+
ReactDOM.unmountComponentAtNode(div);
10+
});

src/setupTests.js

+11
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,14 @@ import { configure } from 'enzyme';
22
import Adapter from 'enzyme-adapter-react-16';
33

44
configure({ adapter: new Adapter() });
5+
6+
if (global.document) {
7+
document.createRange = () => ( {
8+
setStart: () => {},
9+
setEnd: () => {},
10+
commonAncestorContainer: {
11+
nodeName: 'BODY',
12+
ownerDocument: document,
13+
},
14+
});
15+
}

src/views/Base/Collapses/Collapses.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ class Collapses extends Component {
103103
</CardBody>
104104
</Collapse>
105105
<CardFooter>
106-
<Button color="primary" onClick={this.toggle} style={{ marginBottom: '1rem' }}>Toggle</Button>
106+
<Button color="primary" onClick={this.toggle} className={'mb-1'} id="toggleCollapse1">Toggle</Button>
107+
<hr/>
107108
<h5>Current state: {this.state.status}</h5>
108109
</CardFooter>
109110
</Card>
@@ -122,7 +123,7 @@ class Collapses extends Component {
122123
</Fade>
123124
</CardBody>
124125
<CardFooter>
125-
<Button color="primary" onClick={this.toggleFade}>Toggle Fade</Button>
126+
<Button color="primary" onClick={this.toggleFade} id="toggleFade1">Toggle Fade</Button>
126127
</CardFooter>
127128
</Card>
128129
</Col>
+64
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,73 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import Collapses from './Collapses';
4+
import {mount} from 'enzyme/build';
45

56
it('renders without crashing', () => {
67
const div = document.createElement('div');
78
ReactDOM.render(<Collapses />, div);
89
ReactDOM.unmountComponentAtNode(div);
910
});
11+
12+
describe('toggle clicks', function() {
13+
it('collapse without crashing', () => {
14+
const wrapper = mount(<Collapses />);
15+
let collapse = wrapper.find('#toggleCollapse1').at(0);
16+
collapse.simulate('click');
17+
expect(wrapper.state().collapse).toEqual(true);
18+
collapse.simulate('click');
19+
expect(wrapper.state().collapse).toEqual(false);
20+
collapse.simulate('click');
21+
expect(wrapper.state().collapse).toEqual(true);
22+
wrapper.unmount()
23+
});
24+
it('fade without crashing', () => {
25+
const wrapper = mount(<Collapses />);
26+
let fade = wrapper.find('#toggleFade1').at(0);
27+
fade.simulate('click');
28+
expect(wrapper.state().fadeIn).toEqual(false);
29+
fade.simulate('click');
30+
expect(wrapper.state().fadeIn).toEqual(true);
31+
wrapper.unmount()
32+
});
33+
it('accordion without crashing', () => {
34+
const wrapper = mount(<Collapses />);
35+
let accordion = wrapper.find('[aria-controls="collapseOne"]').at(0);
36+
accordion.simulate('click');
37+
expect(wrapper.state().accordion[0]).toEqual(false);
38+
expect(wrapper.state().accordion[1]).toEqual(false);
39+
expect(wrapper.state().accordion[2]).toEqual(false);
40+
accordion = wrapper.find('[aria-controls="collapseTwo"]').at(0);
41+
accordion.simulate('click');
42+
expect(wrapper.state().accordion[0]).toEqual(false);
43+
expect(wrapper.state().accordion[1]).toEqual(true);
44+
expect(wrapper.state().accordion[2]).toEqual(false);
45+
accordion = wrapper.find('[aria-controls="collapseThree"]').at(0);
46+
accordion.simulate('click');
47+
expect(wrapper.state().accordion[0]).toEqual(false);
48+
expect(wrapper.state().accordion[1]).toEqual(false);
49+
expect(wrapper.state().accordion[2]).toEqual(true);
50+
accordion = wrapper.find('[aria-controls="collapseOne"]').at(0);
51+
accordion.simulate('click');
52+
expect(wrapper.state().accordion[0]).toEqual(true);
53+
expect(wrapper.state().accordion[1]).toEqual(false);
54+
expect(wrapper.state().accordion[2]).toEqual(false);
55+
wrapper.unmount()
56+
});
57+
it('custom without crashing', () => {
58+
const wrapper = mount(<Collapses />);
59+
let accordion = wrapper.find('[aria-controls="exampleAccordion1"]').at(0);
60+
accordion.simulate('click');
61+
expect(wrapper.state().custom[0]).toEqual(false);
62+
expect(wrapper.state().custom[1]).toEqual(false);
63+
accordion = wrapper.find('[aria-controls="exampleAccordion1"]').at(0);
64+
accordion.simulate('click');
65+
expect(wrapper.state().custom[0]).toEqual(true);
66+
expect(wrapper.state().custom[1]).toEqual(false);
67+
accordion = wrapper.find('[aria-controls="exampleAccordion2"]').at(0);
68+
accordion.simulate('click');
69+
expect(wrapper.state().custom[0]).toEqual(false);
70+
expect(wrapper.state().custom[1]).toEqual(true);
71+
wrapper.unmount()
72+
});
73+
});
+18
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,27 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
3+
import { mount } from 'enzyme'
34
import Dropdowns from './Dropdowns';
45

56
it('renders without crashing', () => {
67
const div = document.createElement('div');
78
ReactDOM.render(<Dropdowns />, div);
89
ReactDOM.unmountComponentAtNode(div);
910
});
11+
it('toggle click without crashing', () => {
12+
const wrapper = mount(<Dropdowns />);
13+
for (let i=0; i<5; i++) {
14+
let Dropdown = wrapper.find('button.dropdown-toggle').at(i);
15+
Dropdown.simulate('click');
16+
expect(wrapper.state().dropdownOpen[i]).toEqual(true);
17+
}
18+
for (let i=0; i<2; i++) {
19+
let Dropdown = wrapper.find('[data-toggle="dropdown"]').at(0);
20+
Dropdown.simulate('click');
21+
expect(wrapper.state().dropdownOpen[5]).toEqual(true);
22+
let DropdownItem = wrapper.find('div.dropdown-menu > .dropdown-item').at(i);
23+
DropdownItem.simulate('click');
24+
expect(wrapper.state().dropdownOpen[5]).toEqual(false);
25+
}
26+
wrapper.unmount()
27+
});

src/views/Base/Forms/Forms.test.js

+30
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,39 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import Forms from './Forms';
4+
import {mount} from 'enzyme/build';
45

56
it('renders without crashing', () => {
67
const div = document.createElement('div');
78
ReactDOM.render(<Forms />, div);
89
ReactDOM.unmountComponentAtNode(div);
910
});
11+
12+
describe('toggle clicks', function() {
13+
it('dropdowns without crashing', () => {
14+
const wrapper = mount(<Forms />);
15+
for (let i = 0; i < 4; i++) {
16+
let count = i === 0 ? 'first' : i === 1 ? 'second' : i === 2 ? 'third' : 'fourth'
17+
let Dropdown = wrapper.find('button.dropdown-toggle').at(i);
18+
Dropdown.simulate('click');
19+
expect(wrapper.state()[count]).toEqual(true);
20+
}
21+
wrapper.unmount()
22+
});
23+
it('collapse without crashing', () => {
24+
const wrapper = mount(<Forms />);
25+
let collapse = wrapper.find('button.btn-minimize').at(0);
26+
collapse.simulate('click');
27+
expect(wrapper.state().collapse).toEqual(false);
28+
collapse.simulate('click');
29+
expect(wrapper.state().collapse).toEqual(true);
30+
wrapper.unmount()
31+
});
32+
it('fade without crashing', () => {
33+
const wrapper = mount(<Forms />);
34+
let fade = wrapper.find('button.btn-close').at(0);
35+
fade.simulate('click');
36+
expect(wrapper.state().fadeIn).toEqual(false);
37+
wrapper.unmount()
38+
});
39+
})
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import ListGroups from './ListGroups';
4+
import {mount} from 'enzyme/build';
45

56
it('renders without crashing', () => {
67
const div = document.createElement('div');
78
ReactDOM.render(<ListGroups />, div);
89
ReactDOM.unmountComponentAtNode(div);
910
});
11+
it('toggle click without crashing', () => {
12+
const wrapper = mount(<ListGroups />);
13+
for (let i=0; i<4; i++) {
14+
let ListGroup = wrapper.find('#list-tab .list-group-item-action.list-group-item').at(i);
15+
ListGroup.simulate('click');
16+
expect(wrapper.state().activeTab).toEqual(i);
17+
}
18+
wrapper.unmount()
19+
});

src/views/Base/Navs/Navs.test.js

+10
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import Navs from './Navs';
4+
import {mount} from 'enzyme/build';
45

56
it('renders without crashing', () => {
67
const div = document.createElement('div');
78
ReactDOM.render(<Navs />, div);
89
ReactDOM.unmountComponentAtNode(div);
910
});
11+
it('toggle click without crashing', () => {
12+
const wrapper = mount(<Navs />);
13+
for (let i=0; i<2; i++) {
14+
let Nav = wrapper.find('a.dropdown-toggle').at(i);
15+
Nav.simulate('click');
16+
expect(wrapper.state().dropdownOpen[i]).toEqual(true);
17+
}
18+
wrapper.unmount()
19+
});

0 commit comments

Comments
 (0)