Skip to content

Commit d868a3b

Browse files
committed
miraculously got something working with redux-mock-store for testing redux
referenced this blog: https://www.robinwieruch.de/react-connected-component-test
1 parent 9687be8 commit d868a3b

File tree

3 files changed

+115
-1
lines changed

3 files changed

+115
-1
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import React from 'react';
2+
import configureStore from 'redux-mock-store';
3+
import thunk from 'redux-thunk';
4+
import { unmountComponentAtNode } from 'react-dom';
5+
import { act } from 'react-dom/test-utils';
6+
import { reduxRender, prettyDOM } from '../../../test-utils';
7+
import SketchList from './SketchList';
8+
9+
const mockStore = configureStore([thunk]);
10+
11+
const initialTestState = {
12+
ide: null,
13+
files: [],
14+
preferences: {},
15+
user: {
16+
17+
username: 'happydog',
18+
preferences: {},
19+
apiKeys: [],
20+
verified: 'sent',
21+
id: '123456789',
22+
totalSize: 0,
23+
authenticated: true
24+
},
25+
project: null,
26+
sketches: [
27+
{
28+
name: 'testsketch1',
29+
_id: 'testid1',
30+
updatedAt: '2021-02-26T04:58:29.390Z',
31+
files: [],
32+
createdAt: '2021-02-26T04:58:14.136Z',
33+
id: 'testid1'
34+
},
35+
{
36+
name: 'testsketch2',
37+
_id: 'testid2',
38+
updatedAt: '2021-02-23T17:40:43.789Z',
39+
files: [],
40+
createdAt: '2021-02-23T17:40:43.789Z',
41+
id: 'testid2'
42+
}
43+
],
44+
search: {
45+
collectionSearchTerm: '',
46+
sketchSearchTerm: ''
47+
},
48+
sorting: {
49+
field: 'createdAt',
50+
direction: 'DESCENDING'
51+
},
52+
editorAccessibility: {},
53+
toast: {},
54+
console: [],
55+
assets: {},
56+
loading: false,
57+
collections: []
58+
};
59+
60+
describe('<Sketchlist />', () => {
61+
let container = null;
62+
let store;
63+
beforeEach(() => {
64+
// setup a DOM element as a render target
65+
container = document.createElement('div');
66+
document.body.appendChild(container);
67+
store = mockStore(initialTestState);
68+
});
69+
70+
afterEach(() => {
71+
// cleanup on exiting
72+
unmountComponentAtNode(container);
73+
container.remove();
74+
container = null;
75+
});
76+
77+
describe('<SketchListRow />', () => {
78+
it('render', () => {
79+
let component;
80+
// render the component with autosave set to false as default
81+
act(() => {
82+
component = reduxRender(<SketchList />, { store, container });
83+
});
84+
console.log(prettyDOM(container));
85+
});
86+
});
87+
});

client/test-utils.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313
import { render } from '@testing-library/react';
1414
import React from 'react';
1515
import PropTypes from 'prop-types';
16+
import { createStore } from 'redux';
17+
import { Provider } from 'react-redux';
1618

1719
import { I18nextProvider } from 'react-i18next';
1820
import i18n from './i18n-test';
21+
import rootReducer from './reducers';
1922

2023
// re-export everything
2124
// eslint-disable-next-line import/no-extraneous-dependencies
@@ -30,8 +33,31 @@ Providers.propTypes = {
3033
children: PropTypes.element.isRequired
3134
};
3235

36+
function reduxRender(
37+
ui,
38+
{
39+
initialState,
40+
store = createStore(rootReducer, initialState),
41+
...renderOptions
42+
} = {}
43+
) {
44+
function Wrapper({ children }) {
45+
return (
46+
<I18nextProvider i18n={i18n}>
47+
<Provider store={store}>{children}</Provider>
48+
</I18nextProvider>
49+
);
50+
}
51+
52+
Wrapper.propTypes = {
53+
children: PropTypes.element.isRequired
54+
};
55+
56+
return render(ui, { wrapper: Wrapper, ...renderOptions });
57+
}
58+
3359
const customRender = (ui, options) =>
3460
render(ui, { wrapper: Providers, ...options });
3561

3662
// override render method
37-
export { customRender as render };
63+
export { customRender as render, reduxRender };

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@
124124
"postcss-preset-env": "^6.7.0",
125125
"prettier": "^2.2.1",
126126
"react-test-renderer": "^16.12.0",
127+
"redux-mock-store": "^1.5.4",
127128
"rimraf": "^2.7.1",
128129
"sass-loader": "^10.1.1",
129130
"storybook-addon-theme-playground": "^1.2.0",

0 commit comments

Comments
 (0)