@samitouri / QOS-React / commits / 4fd1802ddf

Additional findDOMNode tests

This is failing in Fiber without the fix. Because we have no deletions to rely on in this case and the placement effects have already happened.

Sebastian Markbage committed Dec 1, 2016 at 20:34 UTC 4fd1802ddfaed1026e79af5e9ea355fdebc41399
3 files changed +56
scripts/fiber/tests-failing.txt
+6
@@ -27,6 +27,9 @@ src/renderers/art/__tests__/ReactART-test.js
27 src/renderers/dom/__tests__/ReactDOMProduction-test.js
28 * should throw with an error code in production
29
30 +src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js
31 +* findDOMNode should find dom element after expanding a fragment
32 +
33 src/renderers/dom/shared/__tests__/ReactDOM-test.js
34 * throws in render() if the mount callback is not a function
35 * throws in render() if the update callback is not a function
@@ -63,6 +66,9 @@ src/renderers/dom/shared/__tests__/ReactRenderDocument-test.js
66 * should throw on full document render w/ no markup
67 * supports findDOMNode on full-page components
68
69 +src/renderers/dom/shared/__tests__/findDOMNode-test.js
70 +* findDOMNode should find dom element after an update from null
71 +
72 src/renderers/shared/__tests__/ReactPerf-test.js
73 * should count no-op update as waste
74 * should count no-op update in child as waste
src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js
+24
@@ -459,5 +459,29 @@ describe('ReactDOMFiber', () => {
459 expect(portalContainer.innerHTML).toBe('<div>changed-changed</div>');
460 expect(container.innerHTML).toBe('');
461 });
462 +
463 + it('findDOMNode should find dom element after expanding a fragment', () => {
464 + class MyNode extends React.Component {
465 + render() {
466 + return (
467 + !this.props.flag ?
468 + [<div key="a" />] :
469 + [<span key="b" />, <div key="a" />]
470 + );
471 + }
472 + }
473 +
474 + var container = document.createElement('div');
475 +
476 + var myNodeA = ReactDOM.render(<MyNode />, container);
477 + var a = ReactDOM.findDOMNode(myNodeA);
478 + expect(a.tagName).toBe('DIV');
479 +
480 + var myNodeB = ReactDOM.render(<MyNode flag={true} />, container);
481 + expect(myNodeA === myNodeB).toBe(true);
482 +
483 + var b = ReactDOM.findDOMNode(myNodeB);
484 + expect(b.tagName).toBe('SPAN');
485 + });
486 }
487 });
src/renderers/dom/shared/__tests__/findDOMNode-test.js
+26
@@ -34,6 +34,32 @@ describe('findDOMNode', () => {
34 expect(mySameDiv).toBe(myDiv);
35 });
36
37 + it('findDOMNode should find dom element after an update from null', () => {
38 + function Bar({ flag }) {
39 + if (flag) {
40 + return <span>A</span>;
41 + }
42 + return null;
43 + }
44 + class MyNode extends React.Component {
45 + render() {
46 + return <Bar flag={this.props.flag} />;
47 + }
48 + }
49 +
50 + var container = document.createElement('div');
51 +
52 + var myNodeA = ReactDOM.render(<MyNode />, container);
53 + var a = ReactDOM.findDOMNode(myNodeA);
54 + expect(a).toBe(null);
55 +
56 + var myNodeB = ReactDOM.render(<MyNode flag={true} />, container);
57 + expect(myNodeA === myNodeB).toBe(true);
58 +
59 + var b = ReactDOM.findDOMNode(myNodeB);
60 + expect(b.tagName).toBe('SPAN');
61 + });
62 +
63 it('findDOMNode should reject random objects', () => {
64 expect(function() {
65 ReactDOM.findDOMNode({foo: 'bar'});