Skip to content

Commit 71352ad

Browse files
committed
Add a failing test for Connector#componentWillReceiveProps
1 parent d691bfc commit 71352ad

File tree

5 files changed

+57
-8
lines changed

5 files changed

+57
-8
lines changed

test/components/Connector.spec.js

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import expect from 'expect';
2-
import jsdom from 'mocha-jsdom';
2+
import jsdomReact from './jsdomReact';
33
import React, { PropTypes, Component } from 'react/addons';
44
import { createRedux } from '../../src';
55
import { Connector } from '../../src/react';
@@ -8,7 +8,7 @@ const { TestUtils } = React.addons;
88

99
describe('React', () => {
1010
describe('Connector', () => {
11-
jsdom();
11+
jsdomReact();
1212

1313
// Mock minimal Provider interface
1414
class Provider extends Component {
@@ -128,6 +128,48 @@ describe('React', () => {
128128
expect(spy.calls.length).toBe(3);
129129
});
130130

131+
it('recomputes the state slice when `select` prop changes', () => {
132+
const redux = createRedux({ a: () => 42, b: () => 72 });
133+
134+
function selectA(state) {
135+
return { result: state.a };
136+
}
137+
138+
function selectB(state) {
139+
return { result: state.b };
140+
}
141+
142+
function render({ result }) {
143+
return <div>{result}</div>;
144+
}
145+
146+
class Container extends Component {
147+
constructor() {
148+
super();
149+
this.state = { select: selectA };
150+
}
151+
152+
render() {
153+
return (
154+
<Provider redux={redux}>
155+
{() =>
156+
<Connector select={this.state.select}>
157+
{render}
158+
</Connector>
159+
}
160+
</Provider>
161+
);
162+
}
163+
}
164+
165+
let tree = TestUtils.renderIntoDocument(<Container />);
166+
let div = TestUtils.findRenderedDOMComponentWithTag(tree, 'div');
167+
expect(div.props.children).toBe(42);
168+
169+
tree.setState({ select: selectB });
170+
expect(div.props.children).toBe(72);
171+
});
172+
131173
it('passes `dispatch()` to child function', () => {
132174
const redux = createRedux({ test: () => 'test' });
133175

test/components/Provider.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import expect from 'expect';
2-
import jsdom from 'mocha-jsdom';
2+
import jsdomReact from './jsdomReact';
33
import React, { PropTypes, Component } from 'react/addons';
44
import { createRedux } from '../../src';
55
import { Provider } from '../../src/react';
@@ -8,7 +8,7 @@ const { TestUtils } = React.addons;
88

99
describe('React', () => {
1010
describe('Provider', () => {
11-
jsdom();
11+
jsdomReact();
1212

1313
class Child extends Component {
1414
static contextTypes = {

test/components/connect.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import expect from 'expect';
2-
import jsdom from 'mocha-jsdom';
2+
import jsdomReact from './jsdomReact';
33
import React, { PropTypes, Component } from 'react/addons';
44
import { createRedux } from '../../src';
55
import { connect, Connector } from '../../src/react';
@@ -8,7 +8,7 @@ const { TestUtils } = React.addons;
88

99
describe('React', () => {
1010
describe('provide', () => {
11-
jsdom();
11+
jsdomReact();
1212

1313
// Mock minimal Provider interface
1414
class Provider extends Component {

test/components/jsdomReact.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import ExecutionEnvironment from 'react/lib/ExecutionEnvironment';
2+
import jsdom from 'mocha-jsdom';
3+
4+
export default function jsdomReact() {
5+
jsdom();
6+
ExecutionEnvironment.canUseDOM = true;
7+
}

test/components/provide.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import expect from 'expect';
2-
import jsdom from 'mocha-jsdom';
2+
import jsdomReact from './jsdomReact';
33
import React, { PropTypes, Component } from 'react/addons';
44
import { createRedux } from '../../src';
55
import { provide, Provider } from '../../src/react';
@@ -8,7 +8,7 @@ const { TestUtils } = React.addons;
88

99
describe('React', () => {
1010
describe('provide', () => {
11-
jsdom();
11+
jsdomReact();
1212

1313
class Child extends Component {
1414
static contextTypes = {

0 commit comments

Comments
 (0)