Skip to content

Commit 65c58a3

Browse files
committed
Added react-testing-library setup and example connected component test
1 parent 2f45e52 commit 65c58a3

10 files changed

+234
-14
lines changed

Diff for: README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ export const FCCounter: React.FC<Props> = props => {
198198
return (
199199
<div>
200200
<span>
201-
{label}: {count}{' '}
201+
{label}: {count}
202202
</span>
203203
<button type="button" onClick={handleIncrement}>
204204
{`Increment`}
@@ -269,7 +269,7 @@ export class ClassCounter extends React.Component<Props, State> {
269269
return (
270270
<div>
271271
<span>
272-
{label}: {count}{' '}
272+
{label}: {count}
273273
</span>
274274
<button type="button" onClick={handleIncrement}>
275275
{`Increment`}
@@ -329,7 +329,7 @@ export class ClassCounterWithDefaultProps extends React.Component<
329329
return (
330330
<div>
331331
<span>
332-
{label}: {count}{' '}
332+
{label}: {count}
333333
</span>
334334
<button type="button" onClick={handleIncrement}>
335335
{`Increment`}
@@ -732,12 +732,13 @@ import { countersActions, countersSelectors } from '../features/counters';
732732
import { FCCounter } from '../components';
733733

734734
type OwnProps = {
735-
initialCount: number;
735+
initialCount?: number;
736736
};
737737

738738
const mapStateToProps = (state: Types.RootState, ownProps: OwnProps) => ({
739739
count:
740-
countersSelectors.getReduxCounter(state.counters) + ownProps.initialCount,
740+
countersSelectors.getReduxCounter(state.counters) +
741+
(ownProps.initialCount || 0),
741742
});
742743

743744
export const FCCounterConnectedExtended = connect(
@@ -1569,8 +1570,7 @@ Object.values = () => [];
15691570
"removeComments": true,
15701571
"sourceMap": true
15711572
},
1572-
"include": ["src", "typings"],
1573-
"exclude": ["src/**/*.spec.*"]
1573+
"include": ["src", "typings"]
15741574
}
15751575

15761576
```

Diff for: playground/package-lock.json

+162
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: playground/package.json

+2
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,11 @@
4848
"@types/react-router-dom": "4.3.1",
4949
"@types/react-router-redux": "5.0.17",
5050
"jest": "22.4.3",
51+
"jest-dom": "3.0.1",
5152
"prop-types": "15.6.2",
5253
"react-docgen-typescript": "1.12.3",
5354
"react-styleguidist": "8.0.6",
55+
"react-testing-library": "5.4.4",
5456
"ts-jest": "22.4.6",
5557
"tslint": "5.12.1",
5658
"tslint-react": "3.6.0",

Diff for: playground/src/components/class-counter-with-default-props.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export class ClassCounterWithDefaultProps extends React.Component<
3939
return (
4040
<div>
4141
<span>
42-
{label}: {count}{' '}
42+
{label}: {count}
4343
</span>
4444
<button type="button" onClick={handleIncrement}>
4545
{`Increment`}

Diff for: playground/src/components/class-counter.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class ClassCounter extends React.Component<Props, State> {
2525
return (
2626
<div>
2727
<span>
28-
{label}: {count}{' '}
28+
{label}: {count}
2929
</span>
3030
<button type="button" onClick={handleIncrement}>
3131
{`Increment`}

Diff for: playground/src/components/fc-counter.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const FCCounter: React.FC<Props> = props => {
1616
return (
1717
<div>
1818
<span>
19-
{label}: {count}{' '}
19+
{label}: {count}
2020
</span>
2121
<button type="button" onClick={handleIncrement}>
2222
{`Increment`}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import React from 'react';
2+
import { createStore, combineReducers } from 'redux';
3+
import { Provider } from 'react-redux';
4+
import { render, fireEvent, cleanup } from 'react-testing-library';
5+
6+
import { FCCounterConnectedExtended as ConnectedCounter } from './fc-counter-connected-extended';
7+
8+
const reducer = combineReducers({
9+
counters: combineReducers({
10+
reduxCounter: (state = 0, action: any) => {
11+
switch (action.type) {
12+
case 'counters/INCREMENT':
13+
return state + 1; // action: { type: "INCREMENT"; }
14+
15+
default:
16+
return state;
17+
}
18+
},
19+
}),
20+
});
21+
22+
afterEach(cleanup);
23+
24+
test('can render with redux with defaults', () => {
25+
const label = 'Counter 1';
26+
const { getByText } = renderWithRedux(<ConnectedCounter label={label} />);
27+
fireEvent.click(getByText('Increment'));
28+
expect(getByText(RegExp(label)).textContent).toBe(label + ': 1');
29+
});
30+
31+
test('can render with redux with custom initial state', () => {
32+
const label = 'Counter 1';
33+
const { getByText } = renderWithRedux(<ConnectedCounter label={label} />, {
34+
initialState: { counters: { reduxCounter: 3 } },
35+
});
36+
fireEvent.click(getByText('Increment'));
37+
expect(getByText(RegExp(label)).textContent).toBe(label + ': 4');
38+
});
39+
40+
// TODO: move to external utils
41+
// Redux Provider utility
42+
function renderWithRedux(
43+
jsx: JSX.Element,
44+
options: { initialState?: object } = {}
45+
) {
46+
const store = createStore(reducer, options.initialState);
47+
return {
48+
...render(<Provider store={store}>{jsx}</Provider>),
49+
store,
50+
};
51+
}

Diff for: playground/src/connected/fc-counter-connected-extended.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import { countersActions, countersSelectors } from '../features/counters';
55
import { FCCounter } from '../components';
66

77
type OwnProps = {
8-
initialCount: number;
8+
initialCount?: number;
99
};
1010

1111
const mapStateToProps = (state: Types.RootState, ownProps: OwnProps) => ({
1212
count:
13-
countersSelectors.getReduxCounter(state.counters) + ownProps.initialCount,
13+
countersSelectors.getReduxCounter(state.counters) +
14+
(ownProps.initialCount || 0),
1415
});
1516

1617
export const FCCounterConnectedExtended = connect(

Diff for: playground/tsconfig.build.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"extends": "./tsconfig.json",
3+
"include": ["src", "typings"],
4+
"exclude": ["src/**/*.spec.*"]
5+
}

Diff for: playground/tsconfig.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,5 @@
3131
"removeComments": true,
3232
"sourceMap": true
3333
},
34-
"include": ["src", "typings"],
35-
"exclude": ["src/**/*.spec.*"]
34+
"include": ["src", "typings"]
3635
}

0 commit comments

Comments
 (0)