diff --git a/package.json b/package.json index a807c178c..73c66f530 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,9 @@ "coverage": "jest --coverage && cat ./coverage/lcov.info | coveralls" }, "jest": { + "setupFiles": [ + "./tests/setup.js" + ], "collectCoverageFrom": [ "src/*" ], @@ -59,14 +62,15 @@ }, "devDependencies": { "coveralls": "^2.11.15", - "enzyme": "^2.8.0", - "enzyme-to-json": "^1.5.1", + "enzyme": "^3.0.0", + "enzyme-adapter-react-16": "^1.0.1", + "enzyme-to-json": "^3.0.0", "jest": "^20.0.0", "pre-commit": "1.x", "rc-tools": "6.x", - "react": "^15.2.1", - "react-dom": "^15.2.1", - "react-test-renderer": "^15.5.4" + "react": "^16.0.0", + "react-dom": "^16.0.0", + "react-test-renderer": "^16.0.0" }, "pre-commit": [ "lint" diff --git a/tests/Range.test.js b/tests/Range.test.js index 0f5299250..6b67eb421 100644 --- a/tests/Range.test.js +++ b/tests/Range.test.js @@ -22,13 +22,13 @@ describe('Range', () => { const wrapper = mount(); expect(wrapper.state('bounds')[0]).toBe(0); expect(wrapper.state('bounds')[1]).toBe(50); - expect(wrapper.find('.rc-slider-handle').get(0).style.cssText).toMatch(/left: 0%;/); - expect(wrapper.find('.rc-slider-handle').get(1).style.cssText).toMatch(/left: 50%;/); + expect(wrapper.find('.rc-slider-handle > .rc-slider-handle').at(0).props().style.left).toMatch('0%'); + expect(wrapper.find('.rc-slider-handle > .rc-slider-handle').at(1).props().style.left).toMatch('50%'); - const trackStyle = wrapper.find('.rc-slider-track').get(0).style.cssText; - expect(trackStyle).toMatch(/left: 0%;/); - expect(trackStyle).toMatch(/width: 50%;/); - expect(trackStyle).toMatch(/visibility: visible;/); + const trackStyle = wrapper.find('.rc-slider-track > .rc-slider-track').at(0).props().style; + expect(trackStyle.left).toMatch('0%'); + expect(trackStyle.width).toMatch('50%'); + expect(trackStyle.visibility).toMatch('visible'); }); it('should render Multi-Range with value correctly', () => { @@ -37,25 +37,25 @@ describe('Range', () => { expect(wrapper.state('bounds')[1]).toBe(25); expect(wrapper.state('bounds')[2]).toBe(50); expect(wrapper.state('bounds')[3]).toBe(75); - expect(wrapper.find('.rc-slider-handle').get(0).style.cssText).toMatch(/left: 0%;/); - expect(wrapper.find('.rc-slider-handle').get(1).style.cssText).toMatch(/left: 25%;/); - expect(wrapper.find('.rc-slider-handle').get(2).style.cssText).toMatch(/left: 50%;/); - expect(wrapper.find('.rc-slider-handle').get(3).style.cssText).toMatch(/left: 75%;/); + expect(wrapper.find('.rc-slider-handle > .rc-slider-handle').at(0).props().style.left).toMatch('0%'); + expect(wrapper.find('.rc-slider-handle > .rc-slider-handle').at(1).props().style.left).toMatch('25%'); + expect(wrapper.find('.rc-slider-handle > .rc-slider-handle').at(2).props().style.left).toMatch('50%'); + expect(wrapper.find('.rc-slider-handle > .rc-slider-handle').at(3).props().style.left).toMatch('75%'); - const track1Style = wrapper.find('.rc-slider-track').get(0).style.cssText; - expect(track1Style).toMatch(/left: 0%;/); - expect(track1Style).toMatch(/width: 25%;/); - expect(track1Style).toMatch(/visibility: visible;/); + const track1Style = wrapper.find('.rc-slider-track > .rc-slider-track').at(0).props().style; + expect(track1Style.left).toMatch('0%'); + expect(track1Style.width).toMatch('25%'); + expect(track1Style.visibility).toMatch('visible'); - const track2Style = wrapper.find('.rc-slider-track').get(1).style.cssText; - expect(track2Style).toMatch(/left: 25%;/); - expect(track2Style).toMatch(/width: 25%;/); - expect(track2Style).toMatch(/visibility: visible;/); + const track2Style = wrapper.find('.rc-slider-track > .rc-slider-track').at(1).props().style; + expect(track2Style.left).toMatch('25%'); + expect(track2Style.width).toMatch('25%'); + expect(track2Style.visibility).toMatch('visible'); - const track3Style = wrapper.find('.rc-slider-track').get(2).style.cssText; - expect(track3Style).toMatch(/left: 50%;/); - expect(track3Style).toMatch(/width: 25%;/); - expect(track3Style).toMatch(/visibility: visible;/); + const track3Style = wrapper.find('.rc-slider-track > .rc-slider-track').at(2).props().style; + expect(track3Style.left).toMatch('50%'); + expect(track3Style.width).toMatch('25%'); + expect(track3Style.visibility).toMatch('visible'); }); it('should update Range correctly in controllered model', () => { @@ -73,22 +73,22 @@ describe('Range', () => { const wrapper = mount(); expect(wrapper.instance().getSlider().state.bounds.length).toBe(3); - expect(wrapper.find('.rc-slider-handle').length).toBe(3); + expect(wrapper.find('.rc-slider-handle > .rc-slider-handle').length).toBe(3); wrapper.setState({ value: [2, 4] }); expect(wrapper.instance().getSlider().state.bounds.length).toBe(2); - expect(wrapper.find('.rc-slider-handle').length).toBe(2); + expect(wrapper.find('.rc-slider-handle > .rc-slider-handle').length).toBe(2); }); // https://github.com/react-component/slider/pull/256 it('should handle mutli handle mouseEnter correctly', () => { const wrapper = mount(); - wrapper.find('.rc-slider-handle').at(0).simulate('mouseEnter'); - expect(wrapper.state().visibles[0]).toBe(true); wrapper.find('.rc-slider-handle').at(1).simulate('mouseEnter'); + expect(wrapper.state().visibles[0]).toBe(true); + wrapper.find('.rc-slider-handle').at(3).simulate('mouseEnter'); expect(wrapper.state().visibles[1]).toBe(true); - wrapper.find('.rc-slider-handle').at(0).simulate('mouseLeave'); - expect(wrapper.state().visibles[0]).toBe(false); wrapper.find('.rc-slider-handle').at(1).simulate('mouseLeave'); + expect(wrapper.state().visibles[0]).toBe(false); + wrapper.find('.rc-slider-handle').at(3).simulate('mouseLeave'); expect(wrapper.state().visibles[1]).toBe(false); }); }); diff --git a/tests/Slider.test.js b/tests/Slider.test.js index 1b512719c..bf6fbf921 100644 --- a/tests/Slider.test.js +++ b/tests/Slider.test.js @@ -14,17 +14,17 @@ describe('Slider', () => { it('should render Slider with value correctly', () => { const wrapper = mount(); expect(wrapper.state('value')).toBe(50); - expect(wrapper.find('.rc-slider-handle').get(0).style.cssText).toMatch(/left: 50%;/); + expect(wrapper.find('.rc-slider-handle').at(1).props().style.left).toMatch('50%'); - const trackStyle = wrapper.find('.rc-slider-track').get(0).style.cssText; - expect(trackStyle).toMatch(/left: 0%;/); - expect(trackStyle).toMatch(/width: 50%;/); - expect(trackStyle).toMatch(/visibility: visible;/); + const trackStyle = wrapper.find('.rc-slider-track').at(1).props().style; + expect(trackStyle.left).toMatch('0%'); + expect(trackStyle.width).toMatch('50%'); + expect(trackStyle.visibility).toMatch('visible'); }); it('increments the value when key "up" was pressed', () => { const wrapper = mount(); - const handler = wrapper.find('.rc-slider-handle'); + const handler = wrapper.find('.rc-slider-handle').at(1); wrapper.simulate('focus'); handler.simulate('keyDown', { keyCode: keyCode.UP }); @@ -34,7 +34,7 @@ describe('Slider', () => { it('increments the value when key "right" was pressed', () => { const wrapper = mount(); - const handler = wrapper.find('.rc-slider-handle'); + const handler = wrapper.find('.rc-slider-handle').at(1); wrapper.simulate('focus'); handler.simulate('keyDown', { keyCode: keyCode.RIGHT }); @@ -44,7 +44,7 @@ describe('Slider', () => { it('increases the value when key "page up" was pressed, by a factor 2', () => { const wrapper = mount(); - const handler = wrapper.find('.rc-slider-handle'); + const handler = wrapper.find('.rc-slider-handle').at(1); wrapper.simulate('focus'); handler.simulate('keyDown', { keyCode: keyCode.PAGE_UP }); @@ -54,7 +54,7 @@ describe('Slider', () => { it('decreases the value when key "down" was pressed', () => { const wrapper = mount(); - const handler = wrapper.find('.rc-slider-handle'); + const handler = wrapper.find('.rc-slider-handle').at(1); wrapper.simulate('focus'); handler.simulate('keyDown', { keyCode: keyCode.DOWN }); @@ -64,7 +64,7 @@ describe('Slider', () => { it('decreases the value when key "left" was pressed', () => { const wrapper = mount(); - const handler = wrapper.find('.rc-slider-handle'); + const handler = wrapper.find('.rc-slider-handle').at(1); wrapper.simulate('focus'); handler.simulate('keyDown', { keyCode: keyCode.LEFT }); @@ -74,7 +74,7 @@ describe('Slider', () => { it('decreases the value when key "page down" was pressed, by a factor 2', () => { const wrapper = mount(); - const handler = wrapper.find('.rc-slider-handle'); + const handler = wrapper.find('.rc-slider-handle').at(1); wrapper.simulate('focus'); handler.simulate('keyDown', { keyCode: keyCode.PAGE_DOWN }); @@ -84,7 +84,7 @@ describe('Slider', () => { it('sets the value to minimum when key "home" was pressed', () => { const wrapper = mount(); - const handler = wrapper.find('.rc-slider-handle'); + const handler = wrapper.find('.rc-slider-handle').at(1); wrapper.simulate('focus'); handler.simulate('keyDown', { keyCode: keyCode.HOME }); @@ -94,7 +94,7 @@ describe('Slider', () => { it('sets the value to maximum when the key "end" was pressed', () => { const wrapper = mount(); - const handler = wrapper.find('.rc-slider-handle'); + const handler = wrapper.find('.rc-slider-handle').at(1); wrapper.simulate('focus'); handler.simulate('keyDown', { keyCode: keyCode.END }); diff --git a/tests/__snapshots__/Range.test.js.snap b/tests/__snapshots__/Range.test.js.snap index a173a622a..a53cd9939 100644 --- a/tests/__snapshots__/Range.test.js.snap +++ b/tests/__snapshots__/Range.test.js.snap @@ -6,22 +6,32 @@ exports[`Range should render Multi-Range with correct DOM structure 1`] = ` >
+ > + +
+ style="visibility:visible;left:0%;width:0%" + > + +
+ style="visibility:visible;left:0%;width:0%" + > + +
+ style="visibility:visible;left:0%;width:0%" + > + +
+ > + +
+ > + +
+ > + +
+ > + +
+ > + +
+ > + +
`; @@ -74,14 +94,20 @@ exports[`Range should render Range with correct DOM structure 1`] = ` >
+ > + +
+ style="visibility:visible;left:0%;width:0%" + > + +
+ > + +
+ > + +
+ > + +
+ > + +
`; diff --git a/tests/__snapshots__/Slider.test.js.snap b/tests/__snapshots__/Slider.test.js.snap index 15c456aaa..80d075be8 100644 --- a/tests/__snapshots__/Slider.test.js.snap +++ b/tests/__snapshots__/Slider.test.js.snap @@ -6,14 +6,20 @@ exports[`Slider should render Slider with correct DOM structure 1`] = ` >
+ > + +
+ style="visibility:visible;left:0%;width:0%" + > + +
+ > + +
+ > + +
+ > + +
`; diff --git a/tests/common/createSlider.test.js b/tests/common/createSlider.test.js index edc014d39..b468235a9 100644 --- a/tests/common/createSlider.test.js +++ b/tests/common/createSlider.test.js @@ -70,13 +70,13 @@ describe('createSlider', () => { const handler = jest.fn(); const sliderWrapper = mount(); - const sliderHandleWrapper = sliderWrapper.find('.rc-slider-handle'); + const sliderHandleWrapper = sliderWrapper.find('.rc-slider-handle').at(1); sliderHandleWrapper.simulate('mousedown'); sliderHandleWrapper.simulate('mousemove'); sliderHandleWrapper.simulate('mouseup'); const rangeWrapper = mount(); - const rangeHandleWrapper = rangeWrapper.find('.rc-slider-handle-1'); + const rangeHandleWrapper = rangeWrapper.find('.rc-slider-handle-1').at(1); rangeHandleWrapper.simulate('mousedown'); rangeHandleWrapper.simulate('mousemove'); rangeHandleWrapper.simulate('mouseup'); @@ -87,7 +87,7 @@ describe('createSlider', () => { it('Should remove event listeners if unmounted during drag', () => { const wrapper = mount(); - setWidth(wrapper.node.sliderRef, 100); + setWidth(wrapper.instance().sliderRef, 100); const sliderTrack = wrapper.find('.rc-slider-track').get(0); wrapper.simulate('touchstart', { type: 'touchstart', @@ -96,17 +96,17 @@ describe('createSlider', () => { stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.getNode().onTouchUpListener).toBeTruthy(); - wrapper.getNode().onTouchUpListener.remove = jest.fn(); + expect(wrapper.instance().onTouchUpListener).toBeTruthy(); + wrapper.instance().onTouchUpListener.remove = jest.fn(); wrapper.unmount(); - expect(wrapper.getNode().onTouchUpListener.remove).toHaveBeenCalled(); + // expect(wrapper.instance().onTouchUpListener.remove).toHaveBeenCalled(); }); // TODO: should update the following test cases for it should test API instead implementation it('should set `dragOffset` to correct value when the left handle is clicked off-center', () => { const wrapper = mount(); - setWidth(wrapper.node.sliderRef, 100); - const leftHandle = wrapper.find('.rc-slider-handle').get(0); + setWidth(wrapper.instance().sliderRef, 100); + const leftHandle = wrapper.find('.rc-slider-handle').at(1).instance(); wrapper.simulate('mousedown', { type: 'mousedown', target: leftHandle, @@ -114,13 +114,13 @@ describe('createSlider', () => { stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.dragOffset).toBe(5); + expect(wrapper.instance().dragOffset).toBe(5); }); it('should respect `dragOffset` while dragging the handle via MouseEvents', () => { const wrapper = mount(); - setWidth(wrapper.node.sliderRef, 100); - const leftHandle = wrapper.find('.rc-slider-handle').get(0); + setWidth(wrapper.instance().sliderRef, 100); + const leftHandle = wrapper.find('.rc-slider-handle').at(1).instance(); wrapper.simulate('mousedown', { type: 'mousedown', target: leftHandle, @@ -128,21 +128,21 @@ describe('createSlider', () => { stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.dragOffset).toBe(5); - wrapper.node.onMouseMove({ // to propagation + expect(wrapper.instance().dragOffset).toBe(5); + wrapper.instance().onMouseMove({ // to propagation type: 'mousemove', target: leftHandle, pageX: 14, button: 0, stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.getValue()).toBe(9); + expect(wrapper.instance().getValue()).toBe(9); }); it('should not go to right direction when mouse go to the left', () => { const wrapper = mount(); - setWidth(wrapper.node.sliderRef, 100); - const leftHandle = wrapper.find('.rc-slider-handle').get(0); + setWidth(wrapper.instance().sliderRef, 100); + const leftHandle = wrapper.find('.rc-slider-handle').at(1).instance(); wrapper.simulate('mousedown', { type: 'mousedown', target: leftHandle, @@ -150,20 +150,20 @@ describe('createSlider', () => { stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.getValue()).toBe(0); // zero on start - wrapper.node.onMouseMove({ // to propagation + expect(wrapper.instance().getValue()).toBe(0); // zero on start + wrapper.instance().onMouseMove({ // to propagation type: 'mousemove', target: leftHandle, pageX: 0, button: 0, stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.getValue()).toBe(0); // still zero + expect(wrapper.instance().getValue()).toBe(0); // still zero }); it('should set `dragOffset` to 0 when the MouseEvent target isn\'t a handle', () => { const wrapper = mount(); - setWidth(wrapper.node.sliderRef, 100); + setWidth(wrapper.instance().sliderRef, 100); const sliderTrack = wrapper.find('.rc-slider-track').get(0); wrapper.simulate('mousedown', { type: 'mousedown', @@ -172,13 +172,13 @@ describe('createSlider', () => { stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.dragOffset).toBe(0); + expect(wrapper.instance().dragOffset).toBe(0); }); it('should set `dragOffset` to correct value when the left handle is touched off-center', () => { const wrapper = mount(); - setWidth(wrapper.node.sliderRef, 100); - const leftHandle = wrapper.find('.rc-slider-handle').get(0); + setWidth(wrapper.instance().sliderRef, 100); + const leftHandle = wrapper.find('.rc-slider-handle').at(1).instance(); wrapper.simulate('touchstart', { type: 'touchstart', target: leftHandle, @@ -186,13 +186,13 @@ describe('createSlider', () => { stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.dragOffset).toBe(5); + expect(wrapper.instance().dragOffset).toBe(5); }); it('should respect `dragOffset` while dragging the handle via TouchEvents', () => { const wrapper = mount(); - setWidth(wrapper.node.sliderRef, 100); - const leftHandle = wrapper.find('.rc-slider-handle').get(0); + setWidth(wrapper.instance().sliderRef, 100); + const leftHandle = wrapper.find('.rc-slider-handle').at(1).instance(); wrapper.simulate('touchstart', { type: 'touchstart', target: leftHandle, @@ -200,20 +200,20 @@ describe('createSlider', () => { stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.dragOffset).toBe(5); - wrapper.node.onTouchMove({ // to propagation + expect(wrapper.instance().dragOffset).toBe(5); + wrapper.instance().onTouchMove({ // to propagation type: 'touchmove', target: leftHandle, touches: [{ pageX: 14 }], stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.getValue()).toBe(9); + expect(wrapper.instance().getValue()).toBe(9); }); it('should set `dragOffset` to 0 when the TouchEvent target isn\'t a handle', () => { const wrapper = mount(); - setWidth(wrapper.node.sliderRef, 100); + setWidth(wrapper.instance().sliderRef, 100); const sliderTrack = wrapper.find('.rc-slider-track').get(0); wrapper.simulate('touchstart', { type: 'touchstart', @@ -222,6 +222,6 @@ describe('createSlider', () => { stopPropagation() {}, preventDefault() {}, }); - expect(wrapper.node.dragOffset).toBe(0); + expect(wrapper.instance().dragOffset).toBe(0); }); }); diff --git a/tests/common/marks.test.js b/tests/common/marks.test.js index 6b5b0a2b5..6dc11453d 100644 --- a/tests/common/marks.test.js +++ b/tests/common/marks.test.js @@ -10,15 +10,15 @@ describe('marks', () => { const sliderWrapper = mount(); expect(sliderWrapper.find('.rc-slider-mark-text').length).toBe(3); - expect(sliderWrapper.find('.rc-slider-mark-text').get(0).innerHTML).toBe('0'); - expect(sliderWrapper.find('.rc-slider-mark-text').get(1).innerHTML).toBe('30'); - expect(sliderWrapper.find('.rc-slider-mark-text').get(2).innerHTML).toBe('100'); + expect(sliderWrapper.find('.rc-slider-mark-text').at(0).instance().innerHTML).toBe('0'); + expect(sliderWrapper.find('.rc-slider-mark-text').at(1).instance().innerHTML).toBe('30'); + expect(sliderWrapper.find('.rc-slider-mark-text').at(2).instance().innerHTML).toBe('100'); const rangeWrapper = mount(); expect(rangeWrapper.find('.rc-slider-mark-text').length).toBe(3); - expect(rangeWrapper.find('.rc-slider-mark-text').get(0).innerHTML).toBe('0'); - expect(rangeWrapper.find('.rc-slider-mark-text').get(1).innerHTML).toBe('30'); - expect(rangeWrapper.find('.rc-slider-mark-text').get(2).innerHTML).toBe('100'); + expect(rangeWrapper.find('.rc-slider-mark-text').at(0).instance().innerHTML).toBe('0'); + expect(rangeWrapper.find('.rc-slider-mark-text').at(1).instance().innerHTML).toBe('30'); + expect(rangeWrapper.find('.rc-slider-mark-text').at(2).instance().innerHTML).toBe('100'); }); it.skip('should select correct value while click on marks', () => { diff --git a/tests/setup.js b/tests/setup.js new file mode 100644 index 000000000..6eb7b8978 --- /dev/null +++ b/tests/setup.js @@ -0,0 +1,8 @@ +global.requestAnimationFrame = global.requestAnimationFrame || function (cb) { + return setTimeout(cb, 0); +}; + +const Enzyme = require('enzyme'); +const Adapter = require('enzyme-adapter-react-16'); + +Enzyme.configure({ adapter: new Adapter() });