|
14 | 14 | var React = require('react');
|
15 | 15 | var PropTypes = require('prop-types');
|
16 | 16 | var ReactDOM = require('react-dom');
|
| 17 | +var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags'); |
17 | 18 | var ReactTestUtils = require('react-dom/test-utils');
|
18 | 19 | var renderSubtreeIntoContainer = require('react-dom')
|
19 | 20 | .unstable_renderSubtreeIntoContainer;
|
@@ -299,4 +300,27 @@ describe('renderSubtreeIntoContainer', () => {
|
299 | 300 | ReactDOM.render(<Parent value="foo" />, container);
|
300 | 301 | expect(portal2.textContent).toBe('foo');
|
301 | 302 | });
|
| 303 | + |
| 304 | + if (ReactDOMFeatureFlags.useFiber) { |
| 305 | + it('fails gracefully when mixing React 15 and 16', () => { |
| 306 | + class C extends React.Component { |
| 307 | + render() { |
| 308 | + return <div />; |
| 309 | + } |
| 310 | + } |
| 311 | + const c = ReactDOM.render(<C />, document.createElement('div')); |
| 312 | + // React 15 calls this: |
| 313 | + // https://github.com/facebook/react/blob/77b71fc3c4/src/renderers/dom/client/ReactMount.js#L478-L479 |
| 314 | + expect(() => { |
| 315 | + c._reactInternalInstance._processChildContext({}); |
| 316 | + }).toThrow( |
| 317 | + '_processChildContext is not available in React 16+. This likely ' + |
| 318 | + 'means you have multiple copies of React and are attempting to nest ' + |
| 319 | + 'a React 15 tree inside a React 16 tree using ' + |
| 320 | + "unstable_renderSubtreeIntoContainer, which isn't supported. Try to " + |
| 321 | + 'make sure you have only one copy of React (and ideally, switch to ' + |
| 322 | + 'React.unstable_createPortal).', |
| 323 | + ); |
| 324 | + }); |
| 325 | + } |
302 | 326 | });
|
0 commit comments