Skip to content

Commit f47e76d

Browse files
committed
Merge pull request marmelab#58 from marmelab/speedup_jest_tests
[RFR] Speed up jest tests
2 parents c78b9d6 + 9f03183 commit f47e76d

27 files changed

+229
-265
lines changed

Makefile

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,24 @@ stop-test-server: test-server.PID
2626

2727
run-test-e2e: start-test-server test-e2e stop-test-server
2828

29-
test-unit:
30-
@./node_modules/jest-cli/bin/jest.js
29+
test-unit-init:
30+
./node_modules/babel/bin/babel/index.js app --out-dir src --stage 1 --compact false > /dev/null
31+
mv node_modules/react-medium-editor node_modules/react-medium-editor_es6
32+
./node_modules/babel/bin/babel/index.js node_modules/react-medium-editor_es6 --out-dir node_modules/react-medium-editor --stage 1 --compact false > /dev/null
33+
mv node_modules/admin-config node_modules/admin-config_es6
34+
./node_modules/babel/bin/babel/index.js node_modules/admin-config_es6 --out-dir node_modules/admin-config --stage 1 --compact false > /dev/null
35+
36+
test-unit-clean:
37+
rm -rf node_modules/react-medium-editor
38+
rm -rf node_modules/admin-config
39+
rm -rf ./src
40+
mv node_modules/react-medium-editor_es6 node_modules/react-medium-editor
41+
mv node_modules/admin-config_es6 node_modules/admin-config
42+
43+
test-unit-run:
44+
@./node_modules/jest-cli/bin/jest.js src
45+
46+
test-unit: test-unit-init test-unit-run test-unit-clean
3147

3248
test-e2e:
3349
@./node_modules/protractor/bin/protractor protractor.conf.js

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,9 @@ Launch the entire tests suite by calling:
112112
```sh
113113
make test
114114
```
115+
116+
Run only one unit test by calling, for example:
117+
118+
```
119+
./node_modules/jest-cli/bin/jest.js -c jest.json app/__tests__/autoloaderTest.js
120+
```

app/Component/Button/__tests__/MaBackButtonTest.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
jest.autoMockOff();
22

33
describe('MaBackButton', () => {
4-
let React, TestUtils, MaBackButton;
5-
6-
beforeEach(() => {
7-
React = require('react/addons');
8-
TestUtils = React.addons.TestUtils;
9-
MaBackButton = require('../MaBackButton');
10-
});
4+
const React = require('react/addons');
5+
const TestUtils = React.addons.TestUtils;
6+
const MaBackButton = require('../MaBackButton');
117

128
describe('With good props', () => {
139
it('Should display label and size', () => {

app/Component/Button/__tests__/MaCreateButtonTest.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@ jest.autoMockOff();
22
jest.setMock('react-router', {Link : require('../__mocks__/Link')});
33

44
describe('MaCreateButton', () => {
5-
let React, TestUtils, MaCreateButton;
6-
7-
beforeEach(() => {
8-
React = require('react/addons');
9-
TestUtils = React.addons.TestUtils;
10-
MaCreateButton = require('../MaCreateButton');
11-
});
5+
const React = require('react/addons');
6+
const TestUtils = React.addons.TestUtils;
7+
const MaCreateButton = require('../MaCreateButton');
128

139
describe('With good props', () => {
1410
it('Should display label and size', () => {
@@ -21,7 +17,7 @@ describe('MaCreateButton', () => {
2117

2218
it('Should redirect to the create route', () => {
2319
let createButton = TestUtils.renderIntoDocument(<MaCreateButton entityName={'MyEntity'} label={'Hello'} size={'xs'} />);
24-
createButtonNode = React.findDOMNode(createButton);
20+
let createButtonNode = React.findDOMNode(createButton);
2521

2622
expect(createButtonNode.attributes['data-click-to'].value).toEqual('');
2723

app/Component/Button/__tests__/MaDeleteButtonTest.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
jest.autoMockOff();
2-
jest.setMock('react-router', {Link : require('../__mocks__/Link')});
2+
jest.setMock('react-router', { Link : require('../__mocks__/Link') });
33

44
describe('MaDeleteButton', () => {
5-
let React, TestUtils, MaDeleteButton, entry;
5+
const React = require('react/addons');
6+
const TestUtils = React.addons.TestUtils;
7+
const MaDeleteButton = require('../MaDeleteButton');
68

7-
beforeEach(() => {
8-
React = require('react/addons');
9-
TestUtils = React.addons.TestUtils;
10-
MaDeleteButton = require('../MaDeleteButton');
9+
let entry;
1110

11+
beforeEach(() => {
1212
entry = {
1313
identifierValue: 23
1414
};
@@ -25,7 +25,7 @@ describe('MaDeleteButton', () => {
2525

2626
it('Should redirect to the create route', () => {
2727
let deleteButton = TestUtils.renderIntoDocument(<MaDeleteButton entityName={'MyEntity'} entry={entry} label={'Hello'} size={'xs'} />);
28-
deleteButtonNode = React.findDOMNode(deleteButton);
28+
let deleteButtonNode = React.findDOMNode(deleteButton);
2929

3030
expect(deleteButtonNode.attributes['data-click-to'].value).toEqual('');
3131

app/Component/Button/__tests__/MaEditButtonTest.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ jest.autoMockOff();
22
jest.setMock('react-router', {Link : require('../__mocks__/Link')});
33

44
describe('MaEditButton', () => {
5-
let React, TestUtils, MaEditButton, entry;
5+
const React = require('react/addons');
6+
const TestUtils = React.addons.TestUtils;
7+
const MaEditButton = require('../MaEditButton');
68

7-
beforeEach(() => {
8-
React = require('react/addons');
9-
TestUtils = React.addons.TestUtils;
10-
MaEditButton = require('../MaEditButton');
9+
let entry;
1110

11+
beforeEach(() => {
1212
entry = {
1313
identifierValue: 23
1414
};

app/Component/Button/__tests__/MaListButtonTest.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@ jest.autoMockOff();
22
jest.setMock('react-router', {Link : require('../__mocks__/Link')});
33

44
describe('MaListButton', () => {
5-
let React, TestUtils, MaListButton;
6-
7-
beforeEach(() => {
8-
React = require('react/addons');
9-
TestUtils = React.addons.TestUtils;
10-
MaListButton = require('../MaListButton');
11-
});
5+
const React = require('react/addons');
6+
const TestUtils = React.addons.TestUtils;
7+
const MaListButton = require('../MaListButton');
128

139
describe('With good props', () => {
1410
it('Should display label', () => {

app/Component/Button/__tests__/MaShowButtonTest.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ jest.autoMockOff();
22
jest.setMock('react-router', {Link : require('../__mocks__/Link')});
33

44
describe('MaShowButton', () => {
5-
let React, TestUtils, MaShowButton, entry;
5+
const React = require('react/addons');
6+
const TestUtils = React.addons.TestUtils;
7+
const MaShowButton = require('../MaShowButton');
8+
9+
let entry;
610

711
beforeEach(() => {
8-
React = require('react/addons');
9-
TestUtils = React.addons.TestUtils;
10-
MaShowButton = require('../MaShowButton');
1112

1213
entry = {
1314
identifierValue: 23

app/Component/Column/__tests__/BooleanColumnTest.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
jest.autoMockOff();
22

33
describe('BooleanColumn', () => {
4-
let React, TestUtils, BooleanColumn;
5-
6-
beforeEach(() => {
7-
React = require('react/addons');
8-
TestUtils = React.addons.TestUtils;
9-
BooleanColumn = require('../BooleanColumn');
10-
});
4+
const React = require('react/addons');
5+
const TestUtils = React.addons.TestUtils;
6+
const BooleanColumn = require('../BooleanColumn');
117

128
it('should get a span with correct class depending of Column value', () => {
139
[true, false].forEach((booleanValue) => {

app/Component/Column/__tests__/ColumnTest.js

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
jest.autoMockOff();
22

33
describe('Column', () => {
4-
let React, TestUtils, Column, Field, NumberField, Entity, FieldViewConfiguration, StringFieldView, NumberFieldView;
4+
const React = require('react/addons');
5+
const TestUtils = React.addons.TestUtils;
6+
const Column = require('../Column');
7+
const Field = require('admin-config/lib/Field/Field');
8+
const NumberField = require('admin-config/lib/Field/NumberField');
9+
const Entity = require('admin-config/lib/Entity/Entity');
10+
const FieldViewConfiguration = require('../../../Field/FieldViewConfiguration');
11+
const StringFieldView = require('../../../Field/StringFieldView');
12+
const NumberFieldView = require('../../../Field/NumberFieldView');
13+
14+
FieldViewConfiguration.registerFieldView('string', StringFieldView);
15+
FieldViewConfiguration.registerFieldView('number', NumberFieldView);
516

617
function getColumn(field, entity, entry, dataStore, configuration) {
718
const col = TestUtils.renderIntoDocument(<Column field={field} entity={entity} entry={entry}
@@ -10,20 +21,6 @@ describe('Column', () => {
1021
return React.findDOMNode(col);
1122
}
1223

13-
beforeEach(() => {
14-
React = require('react/addons');
15-
TestUtils = React.addons.TestUtils;
16-
Column = require('../Column');
17-
Field = require('admin-config/lib/Field/Field');
18-
NumberField = require('admin-config/lib/Field/NumberField');
19-
Entity = require('admin-config/lib/Entity/Entity');
20-
FieldViewConfiguration = require('../../../Field/FieldViewConfiguration');
21-
StringFieldView = require('../../../Field/StringFieldView');
22-
NumberFieldView = require('../../../Field/NumberFieldView');
23-
24-
FieldViewConfiguration.registerFieldView('string', StringFieldView);
25-
FieldViewConfiguration.registerFieldView('number', NumberFieldView);
26-
});
2724

2825
it('should display a string field', () => {
2926
const field = new Field('name');

app/Component/Column/__tests__/StringColumnTest.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
jest.autoMockOff();
22

33
describe('StringColumn', () => {
4-
let React, TestUtils, StringColumn;
5-
6-
beforeEach(() => {
7-
React = require('react/addons');
8-
TestUtils = React.addons.TestUtils;
9-
StringColumn = require('../StringColumn');
10-
});
4+
const React = require('react/addons');
5+
const TestUtils = React.addons.TestUtils;
6+
const StringColumn = require('../StringColumn');
117

128
it('should display given value', () => {
139
let field = TestUtils.renderIntoDocument(<StringColumn value={'Hello'} />);

app/Component/Column/__tests__/TemplateColumnTest.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
jest.autoMockOff();
22

33
describe('TemplateColumn', () => {
4-
let React, TestUtils, TemplateColumn;
5-
6-
beforeEach(() => {
7-
React = require('react/addons');
8-
TestUtils = React.addons.TestUtils;
9-
TemplateColumn = require('../TemplateColumn');
10-
});
4+
const React = require('react/addons');
5+
const TestUtils = React.addons.TestUtils;
6+
const TemplateColumn = require('../TemplateColumn');
117

128
it('should execute template function with current entry if is a function', () => {
139
const template = (e => e.first_name + " " + e.last_name.toUpperCase());

app/Component/Datagrid/__tests__/DatagridActionsTest.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
jest.autoMockOff();
2-
jest.setMock('react-router', {Link : require('../../Button/__mocks__/Link')});
2+
jest.setMock('react-router', { Link: require('../../Button/__mocks__/Link') });
33

44
describe('DatagridActions', () => {
5-
let React, TestUtils, DatagridActions, routerWrapper, Entry, myEntry;
5+
const React = require('react/addons');
6+
const TestUtils = React.addons.TestUtils;
7+
const DatagridActions = require('../DatagridActions');
8+
const routerWrapper = require('../../../Test/RouterWrapper');
9+
const Entry = require('admin-config/lib/Entry');
10+
11+
let myEntry;
612

713
function getActions(entityName, listActions, entry, size=null) {
814
return routerWrapper(() => {
@@ -11,13 +17,6 @@ describe('DatagridActions', () => {
1117
}
1218

1319
beforeEach(() => {
14-
React = require('react/addons');
15-
TestUtils = React.addons.TestUtils;
16-
DatagridActions = require('../DatagridActions');
17-
routerWrapper = require('../../../Test/RouterWrapper');
18-
19-
Entry = require('admin-config/lib/Entry');
20-
2120
myEntry = new Entry('posts', { 'id': 1, 'title': 'First Post' }, 1);
2221
});
2322

app/Component/Datagrid/__tests__/DatagridTest.js

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
11
jest.autoMockOff();
2-
jest.setMock('react-router', {Link : require('../../Button/__mocks__/Link')});
2+
jest.setMock('react-router', { Link: require('../../Button/__mocks__/Link') });
33

44
describe('Datagrid', () => {
5-
let React, TestUtils, Datagrid, routerWrapper, ListView, Entry, Entity, NumberField, Field, DateField;
6-
let FieldViewConfiguration, StringFieldView, NumberFieldView, DateFieldView;
5+
const React = require('react/addons');
6+
const TestUtils = React.addons.TestUtils;
7+
const Datagrid = require('../Datagrid');
8+
const routerWrapper = require('../../../Test/RouterWrapper');
9+
10+
const ListView = require('admin-config/lib/View/ListView');
11+
const Entry = require('admin-config/lib/Entry');
12+
const Entity = require('admin-config/lib/Entity/Entity');
13+
const NumberField = require('admin-config/lib/Field/NumberField');
14+
const Field = require('admin-config/lib/Field/Field');
15+
const DateField = require('admin-config/lib/Field/DateField');
16+
17+
const FieldViewConfiguration = require('../../../Field/FieldViewConfiguration');
18+
const StringFieldView = require('../../../Field/StringFieldView');
19+
const NumberFieldView = require('../../../Field/NumberFieldView');
20+
const DateFieldView = require('../../../Field/DateFieldView');
21+
22+
FieldViewConfiguration.registerFieldView('string', StringFieldView);
23+
FieldViewConfiguration.registerFieldView('number', NumberFieldView);
24+
FieldViewConfiguration.registerFieldView('date', DateFieldView);
25+
726
let view, router, fields;
827

928
function getDatagrid(name, entityName, fields, view, router, entries, sortDir, sortField, configuration) {
@@ -28,27 +47,6 @@ describe('Datagrid', () => {
2847
}
2948

3049
beforeEach(() => {
31-
React = require('react/addons');
32-
TestUtils = React.addons.TestUtils;
33-
Datagrid = require('../Datagrid');
34-
routerWrapper = require('../../../Test/RouterWrapper');
35-
36-
ListView = require('admin-config/lib/View/ListView');
37-
Entry = require('admin-config/lib/Entry');
38-
Entity = require('admin-config/lib/Entity/Entity');
39-
NumberField = require('admin-config/lib/Field/NumberField');
40-
Field = require('admin-config/lib/Field/Field');
41-
DateField = require('admin-config/lib/Field/DateField');
42-
43-
FieldViewConfiguration = require('../../../Field/FieldViewConfiguration');
44-
StringFieldView = require('../../../Field/StringFieldView');
45-
NumberFieldView = require('../../../Field/NumberFieldView');
46-
DateFieldView = require('../../../Field/DateFieldView');
47-
48-
FieldViewConfiguration.registerFieldView('string', StringFieldView);
49-
FieldViewConfiguration.registerFieldView('number', NumberFieldView);
50-
FieldViewConfiguration.registerFieldView('date', DateFieldView);
51-
5250
view = new ListView('myView');
5351

5452
router = {

app/Component/Datagrid/__tests__/MaDatagridPaginationTest.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
11
jest.autoMockOff();
2-
jest.setMock('react-router', {Link : require('../../Button/__mocks__/Link')});
2+
jest.setMock('react-router', { Link: require('../../Button/__mocks__/Link') });
33

44
describe('MaDatagridPagination', () => {
5-
6-
let React, TestUtils, MaDatagridPagination, routerWrapper;
5+
const React = require('react/addons');
6+
const TestUtils = React.addons.TestUtils;
7+
const MaDatagridPagination = require('../MaDatagridPagination');
8+
const routerWrapper = require('../../../Test/RouterWrapper');
79

810
function getPagination(items, page, perPage, entity = null) {
911
return routerWrapper(() => {
1012
return <MaDatagridPagination totalItems={items} entity={entity} page={page} perPage={perPage} />
1113
});
1214
}
1315

14-
beforeEach(() => {
15-
React = require('react/addons');
16-
TestUtils = React.addons.TestUtils;
17-
MaDatagridPagination = require('../MaDatagridPagination');
18-
routerWrapper = require('../../../Test/RouterWrapper');
19-
});
20-
2116
describe('Without items', () => {
2217
it('Should display "No record found"', () => {
2318
let pagination = getPagination(0, 1, 10);

app/Component/Field/__tests__/CheckboxFieldTest.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
jest.autoMockOff();
22

33
describe('CheckboxField', () => {
4-
let React, TestUtils, CheckboxField, values = {};
5-
const onChange = (name, value) => { values[name] = value; };
4+
const React = require('react/addons');
5+
const TestUtils = React.addons.TestUtils;
6+
const CheckboxField = require('../CheckboxField');
67

7-
beforeEach(() => {
8-
React = require('react/addons');
9-
TestUtils = React.addons.TestUtils;
10-
CheckboxField = require('../CheckboxField');
11-
});
8+
let values = {};
9+
const onChange = (name, value) => { values[name] = value; };
1210

1311
it('should get an input with correct default value and editable', () => {
1412
[true, false, 1, 0].forEach((booleanValue) => {

0 commit comments

Comments
 (0)