8000 feat: support React 16 · gregberge/recompact@535e3cf · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
This repository was archived by the owner on Nov 26, 2018. It is now read-only.

Commit 535e3cf

Browse files
committed
feat: support React 16
- Fix all tests - Update peerDependencies - Fix all warnings
1 parent 2b77232 commit 535e3cf

18 files changed

+780
-469
lines changed

.babelrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
"presets": [
77
["env", { "loose": true }],
88
"react"
9-
],
9+
]
1010
}

package.json

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@
2424
"transform": {
2525
"^.+\\.js$": "<rootDir>/node_modules/babel-jest"
2626
},
27-
"coverageDirectory": "./coverage/"
27+
"coverageDirectory": "./coverage/",
28+
"setupFiles": [
29+
"raf/polyfill",
30+
"<rootDir>/setupTests.js"
31+
]
2832
},
2933
"keywords": [
3034
"composition",
@@ -37,10 +41,10 @@
3741
"recompose"
3842
],
3943
"peerDependencies": {
40-
"react": "^15.0.0"
44+
"react": "^15.0.0 || ^16.0.0"
4145
},
4246
"dependencies": {
43-
"fbjs": "^0.8.14",
47+
"fbjs": "^0.8.16",
4448
"hoist-non-react-statics": "^2.3.1",
4549
"object.omit": "^3.0.0",
4650
"object.pick": "^1.3.0",
@@ -49,7 +53,8 @@
4953
},
5054
"devDependencies": {
5155
"babel-cli": "^6.26.0",
52-
"babel-eslint": "^7.2.3",
56+
"babel-eslint": "^8.0.1",
57+
"babel-jest": "^21.2.0",
5358
"babel-loader": "^7.1.2",
5459
"babel-plugin-transform-class-properties": "^6.24.1",
5560
"babel-plugin-transform-object-rest-spread": "^6.26.0",
@@ -58,32 +63,34 @@
5863
"benchmark": "^2.1.4",
5964
"codecov": "^2.3.0",
6065
"conventional-github-releaser": "^1.1.12",
61-
"conventional-recommended-bump": "^1.0.1",
62-
"create-react-class": "^15.6.0",
66+
"conventional-recommended-bump": "^1.0.2",
67+
"create-react-class": "^15.6.2",
6368
"docdown": "neoziro/docdown#multiple-files-support",
6469
"ejs": "^2.5.7",
65-
"enzyme": "^2.9.1",
66-
"eslint": "^4.6.1",
70+
"enzyme": "^3.1.0",
71+
"enzyme-adapter-react-16": "^1.0.1",
72+
"eslint": "^4.8.0",
6773
"eslint-config-airbnb": "^15.1.0",
68-
"eslint-config-prettier": "^2.4.0",
74+
"eslint-config-prettier": "^2.6.0",
6975
"eslint-plugin-import": "^2.7.0",
7076
"eslint-plugin-jsx-a11y": "^5.0.0",
71-
"eslint-plugin-react": "^7.3.0",
72-
"fs-extra": "^4.0.1",
77+
"eslint-plugin-react": "^7.4.0",
78+
"fs-extra": "^4.0.2",
7379
"html-webpack-plugin": "^2.30.1",
74-
"jest": "^21.0.1",
75-
"jsdom": "^11.2.0",
76-
"marky-markdown": "^11.2.0",
80+
"jest": "^21.2.1",
81+
"jsdom": "^11.3.0",
82+
"marky-markdown": "^11.3.2",
7783
"microtime": "^2.1.6",
7884
"mversion": "^1.10.1",
79-
"prettier": "^1.6.1",
80-
"prop-types": "^15.5.10",
81-
"react": "^15.6.1",
82-
"react-dom": "^15.6.1",
83-
"react-test-renderer": "^15.6.1",
85+
"prettier": "^1.7.4",
86+
"prop-types": "^15.6.0",
87+
"raf": "^3.4.0",
88+
"react": "^16.0.0",
89+
"react-dom": "^16.0.0",
90+
"react-test-renderer": "^16.0.0",
8491
"reassemble": "^0.5.6",
85-
"recompose": "^0.25.0",
92+
"recompose": "^0.25.1",
8693
"rxjs": "^5.4.3",
87-
"webpack": "^3.5.5"
94+
"webpack": "^3.6.0"
8895
}
8996
}

setupTests.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/* eslint-env browser */
2+
import { configure } from 'enzyme'
3+
import Adapter from 'enzyme-adapter-react-16'
4+
5+
configure({ adapter: new Adapter() })

src/__tests__/componentFromStream.test.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ describe('componentFromStream', () => {
1414
const wrapper = mount(<Double n={112} />)
1515
const div = wrapper.find('div')
1616
expect(div.text()).toBe('224')
17+
1718
wrapper.setProps({ n: 358 })
1819
expect(div.text()).toBe('716')
1920
})
@@ -41,7 +42,9 @@ describe('componentFromStream', () => {
4142
const Div = componentFromStream(() => vdom$.mapTo(<div />))
4243
const wrapper = mount(<Div />)
4344
expect(wrapper.find('div').length).toBe(0)
45+
4446
vdom$.next()
47+
wrapper.update()
4548
expect(wrapper.find('div').length).toBe(1)
4649
})
4750

@@ -52,11 +55,10 @@ describe('componentFromStream', () => {
5255
)
5356

5457
const wrapper = mount(<Div value={1} />)
55-
const div = wrapper.find('div')
58+
expect(wrapper.find('div').prop('value')).toBe(1)
5659

57-
expect(div.prop('value')).toBe(1)
5860
wrapper.setProps({ value: 2 })
59-
expect(div.prop('value')).toBe(2)
61+
expect(wrapper.find('div').prop('value')).toBe(2)
6062
})
6163

6264
it('should complete props stream before unmounting', () => {

src/__tests__/connectObs.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('connectObs', () => {
3434
expect(wrapper.find('div').prop('className')).toBe('foo')
3535

3636
baseClassName$.next('bar')
37-
37+
wrapper.update()
3838
expect(wrapper.find('div').prop('className')).toBe('bar')
3939
})
4040

@@ -50,7 +50,7 @@ describe('connectObs', () => {
5050
expect(wrapper.find('div').prop('className')).toBe('foo')
5151

5252
baseClassName$.next('bar')
53-
53+
wrapper.update()
5454
expect(wrapper.find('div').prop('className')).toBe('bar')
5555
})
5656

@@ -68,6 +68,7 @@ describe('connectObs', () => {
6868
expect(changeSpy).not.toHaveBeenCalled()
6969

7070
wrapper.find('input').prop('onChange')('foo')
71+
wrapper.update()
7172
expect(changeSpy).toHaveBeenCalledTimes(1)
7273
expect(changeSpy).toHaveBeenLastCalledWith('foo')
7374
})
@@ -81,7 +82,6 @@ describe('connectObs', () => {
8182
expect(wrapper.find(Dummy).prop('className')).toBe('bar')
8283

8384
wrapper.setProps({ foo: 'foo' })
84-
8585
expect(wrapper.find(Dummy).prop('className')).toBe('foo')
8686
})
8787

src/__tests__/mapPropsStream.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ describe('mapPropsStream', () => {
4141
expect(propsSpy).toHaveBeenLastCalledWith({ className: 'bar' })
4242

4343
wrapper.setProps({ className: 'foo' })
44-
4544
expect(propsSpy).toHaveBeenCalledTimes(2)
4645
expect(propsSpy).toHaveBeenLastCalledWith({ className: 'foo' })
4746
})
@@ -96,9 +95,10 @@ describe('mapPropsStream', () => {
9695
expect(wrapper.find(Dummy).exists()).toBeFalsy()
9796

9897
trigger$.next(true)
98+
wrapper.update()
9999

100100
const dummy = wrapper.find(Dummy)
101-
expect(dummy.exists()).toBeTruthy()
101+
expect(dummy.exists()).toBe(true)
102102
expect(dummy.prop('renderCount')).toBe(1)
103103
expect(dummy.prop('foo')).toBe('bar')
104104
})

src/__tests__/onlyUpdateForKeys.test.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,22 @@ describe('onlyUpdateForKeys', () => {
1111
onlyUpdateForKeys(['counter']),
1212
)(Dummy)
1313

14-
const dummy = mount(<Counter />).find(Dummy)
15-
const { updateCounter, updateFoobar } = dummy.props()
14+
const wrapper = mount(<Counter />)
15+
const { updateCounter, updateFoobar } = wrapper.find(Dummy).props()
1616

17-
expect(dummy.prop('counter')).toBe(0)
18-
expect(dummy.prop('foobar')).toBe('foobar')
17+
expect(wrapper.find(Dummy).prop('counter')).toBe(0)
18+
expect(wrapper.find(Dummy).prop('foobar')).toBe('foobar')
1919

2020
// Does not update
2121
updateFoobar('barbaz')
22-
expect(dummy.prop('counter')).toBe(0)
23-
expect(dummy.prop('foobar')).toBe('foobar')
22+
wrapper.update()
23+
expect(wrapper.find(Dummy).prop('counter')).toBe(0)
24+
expect(wrapper.find(Dummy).prop('foobar')).toBe('foobar')
2425

2526
updateCounter(42)
26-
expect(dummy.prop('counter')).toBe(42)
27-
expect(dummy.prop('foobar')).toBe('barbaz')
27+
wrapper.update()
28+
expect(wrapper.find(Dummy).prop('counter')).toBe(42)
29+
expect(wrapper.find(Dummy).prop('foobar')).toBe('barbaz')
2830
})
2931

3032
it('should be merged with other hoc', () => {

src/__tests__/onlyUpdateForPropTypes.test.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,22 @@ describe('onlyUpdateForPropTypes', () => {
1919
setPropTypes({ counter: PropTypes.number }),
2020
)(Dummy)
2121

22-
const dummy = mount(<Counter />).find(Dummy)
23-
const { updateCounter, updateFoobar } = dummy.props()
22+
const wrapper = mount(<Counter />)
23+
const { updateCounter, updateFoobar } = wrapper.find(Dummy).props()
2424

25-
expect(dummy.prop('counter')).toBe(0)
26-
expect(dummy.prop('foobar')).toBe('foobar')
25+
expect(wrapper.find(Dummy).prop('counter')).toBe(0)
26+
expect(wrapper.find(Dummy).prop('foobar')).toBe('foobar')
2727

2828
// Does not update
2929
updateFoobar('barbaz')
30-
expect(dummy.prop('counter')).toBe(0)
31-
expect(dummy.prop('foobar')).toBe('foobar')
30+
wrapper.update()
31+
expect(wrapper.find(Dummy).prop('counter')).toBe(0)
32+
expect(wrapper.find(Dummy).prop('foobar')).toBe('foobar')
3233

3334
updateCounter(42)
34-
expect(dummy.prop('counter')).toBe(42)
35-
expect(dummy.prop('foobar')).toBe('barbaz')
35+
wrapper.update()
36+
expect(wrapper.find(Dummy).prop('counter')).toBe(42)
37+
expect(wrapper.find(Dummy).prop('foobar')).toBe('barbaz')
3638
})
3739

3840
it('should be merged with other hoc', () => {

src/__tests__/pluckObs.test.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,16 @@ import { compose, withObs, pluckObs } from '../'
66
describe('pluckObs', () => {
77
it('should connect one observable to a prop without $', () => {
88
const baseClassName$ = new Rx.BehaviorSubject('foo')
9-
const Component = compose(withObs({ className$: baseClassName$ }), pluckObs('className$'))('div')
9+
const Component = compose(
10+
withObs({ className$: baseClassName$ }),
11+
pluckObs('className$'),
12+
)('div')
1013

1114
const wrapper = mount(<Component />)
1215

1316
expect(wrapper.find('div').prop('className')).toBe('foo')
1417
baseClassName$.next('bar')
18+
wrapper.update()
1519
expect(wrapper.find('div').prop('className')).toBe('bar')
1620
})
1721

src/__tests__/pure.test.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,22 @@ describe('pure', () => {
1212
countRenders,
1313
)(Dummy)
1414

15-
const dummy = mount(<Todos />).find(Dummy)
16-
const updateTodos = dummy.prop 57AE ('updateTodos')
15+
const wrapper = mount(<Todos />)
16+
const updateTodos = wrapper.find(Dummy).prop('updateTodos')
1717

18-
expect(dummy.prop('todos')).toBe(initialTodos)
19-
expect(dummy.prop('renderCount')).toBe(1)
18+
expect(wrapper.find(Dummy).prop('todos')).toBe(initialTodos)
19+
expect(wrapper.find(Dummy).prop('renderCount')).toBe(1)
2020

2121
// Does not re-render
2222
updateTodos(initialTodos)
23-
expect(dummy.prop('todos')).toBe(initialTodos)
24-
expect(dummy.prop('renderCount')).toBe(1)
23+
wrapper.update()
24+
expect(wrapper.find(Dummy).prop('todos')).toBe(initialTodos)
25+
expect(wrapper.find(Dummy).prop('renderCount')).toBe(1)
2526

2627
updateTodos(todos => todos.slice(0, -1))
27-
expect(dummy.prop('todos')).toEqual(['eat', 'drink'])
28-
expect(dummy.prop('renderCount')).toBe(2)
28+
wrapper.update()
29+
expect(wrapper.find(Dummy).prop('todos')).toEqual(['eat', 'drink'])
30+
expect(wrapper.find(Dummy).prop('renderCount')).toBe(2)
2931
})
3032

3133
it('should add correct display name', () => {

src/__tests__/renderComponent.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ describe('renderComponent', () => {
3030
expect(wrapper.find('Dummy2').length).toBe(1)
3131

3232
updateFlip(true)
33+
wrapper.update()
3334
expect(wrapper.find('Dummy1').length).toBe(1)
3435
expect(wrapper.find('Dummy2').length).toBe(0)
3536
})

src/__tests__/shouldUpdate.test.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,19 @@ describe('shouldUpdate', () => {
1313
expect(EnhancedDummy.displayName).toBe('shouldUpdate(countRenders(Dummy))')
1414

1515
const wrapper = mount(<EnhancedDummy foo="bar" />)
16-
const dummy = wrapper.find(Dummy)
1716

1817
// Does not re-render.
1918
wrapper.setProps({ foo: 'bar' })
2019
wrapper.setProps({ foo: 'bar' })
21-
expect(dummy.prop('foo')).toBe('bar')
22-
expect(dummy.prop('renderCount')).toBe(1)
20+
wrapper.update()
21+
expect(wrapper.find(Dummy).prop('foo')).toBe('bar')
22+
expect(wrapper.find(Dummy).prop('renderCount')).toBe(1)
2323

2424
// Re-renders.
2525
wrapper.setProps({ foo: 'baz' })
26-
expect(dummy.prop('foo')).toBe('baz')
27-
expect(dummy.prop('renderCount')).toBe(2)
26+
wrapper.update()
27+
expect(wrapper.find(Dummy).prop('foo')).toBe('baz')
28+
expect(wrapper.find(Dummy).prop('renderCount')).toBe(2)
2829
})
2930

3031
it('should be mergeable', () => {

src/__tests__/withPropsOnChange.test.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,23 @@ describe('withPropsOnChange', () => {
2424
}),
2525
)(Dummy)
2626

27-
const dummy = mount(<StringConcat />).find(Dummy)
28-
const { updateStrings } = dummy.props()
27+
const wrapper = mount(<StringConcat />)
28+
const { updateStrings } = wrapper.find(Dummy).props()
2929

30-
expect(dummy.prop('foobar')).toBe('ab')
30+
expect(wrapper.find(Dummy).prop('foobar')).toBe('ab')
3131
expect(mapSpy).toHaveBeenCalledTimes(1)
3232

3333
// Does not re-map for non-dependent prop updates
3434
updateStrings(strings => ({ ...strings, c: 'baz' }))
35-
expect(dummy.prop('foobar')).toBe('ab')
36-
expect(dummy.prop('c')).toBe('c')
35+
wrapper.update()
36+
expect(wrapper.find(Dummy).prop('foobar')).toBe('ab')
37+
expect(wrapper.find(Dummy).prop('c')).toBe('c')
3738
expect(mapSpy).toHaveBeenCalledTimes(1)
3839

3940
updateStrings(strings => ({ ...strings, a: 'foo', b: 'bar' }))
40-
expect(dummy.prop('foobar')).toBe('foobar')
41-
expect(dummy.prop('c')).toBe('baz')
41+
wrapper.update()
42+
expect(wrapper.find(Dummy).prop('foobar')).toBe('foobar')
43+
expect(wrapper.find(Dummy).prop('c')).toBe('baz')
4244
expect(mapSpy).toHaveBeenCalledTimes(2)
4345
})
4446

src/__tests__/withReducer.test.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ test('adds a stateful value and a function for updating it', () => {
1616
flattenProp('state'),
1717
)(Dummy)
1818

19-
const dummy = mount(<Counter />).find(Dummy)
20-
const { dispatch } = dummy.props()
19+
const wrapper = mount(<Counter />)
20+
const { dispatch } = wrapper.find(Dummy).props()
2121

22-
expect(dummy.prop('counter')).toBe(0)
22+
expect(wrapper.find(Dummy).prop('counter')).toBe(0)
2323

2424
dispatch({ type: SET_COUNTER, payload: 18 })
25-
expect(dummy.prop('counter')).toBe(18)
25+
wrapper.update()
26+
expect(wrapper.find(Dummy).prop('counter')).toBe(18)
2627
})
2728

2829
test('calls initialState when it is a function', () => {

0 commit comments

Comments
 (0)
0