Skip to content
Prev Previous commit
Next Next commit
Fix test that was too dynamic (and failing)
  • Loading branch information
gaearon committed May 30, 2017
commit e30fd4c16234fd01c96464c8d5e335c923a033b0
3 changes: 0 additions & 3 deletions scripts/fiber/tests-failing.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
src/renderers/__tests__/refs-test.js
* attaches and detaches root refs in fiber

src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js
* should not blow away user-entered text on successful reconnect to an uncontrolled checkbox
* should not blow away user-entered text on successful reconnect to a controlled checkbox
Expand Down
2 changes: 1 addition & 1 deletion scripts/fiber/tests-passing.txt
Original file line number Diff line number Diff line change
Expand Up @@ -610,7 +610,7 @@ src/renderers/__tests__/refs-test.js
* coerces numbers to strings
* attaches, detaches from fiber component with stack layer
* attaches, detaches from stack component with fiber layer
* attaches and detaches root refs in stack
* attaches and detaches root refs

src/renderers/art/__tests__/ReactART-test.js
* should have the correct lifecycle state
Expand Down
41 changes: 19 additions & 22 deletions src/renderers/__tests__/refs-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -411,27 +411,23 @@ describe('string refs between fiber and stack', () => {
});

describe('root level refs', () => {
it('attaches and detaches root refs in stack', () => {
assertForRenderer('ReactDOM');
});

it('attaches and detaches root refs in fiber', () => {
assertForRenderer('ReactDOMFiber');
beforeEach(() => {
var ReactFeatureFlags = require('ReactFeatureFlags');
ReactFeatureFlags.disableNewFiberFeatures = false;
});

const assertForRenderer = (which) => {
const Renderer = require(which);
spyOn(console, 'error');
it('attaches and detaches root refs', () => {
var ReactDOM = require('react-dom');
var inst = null;

// host node
var ref = jest.fn(value => inst = value);
var container = document.createElement('div');
var result = Renderer.render(<div ref={ref} />, container);
var result = ReactDOM.render(<div ref={ref} />, container);
expect(ref).toHaveBeenCalledTimes(1);
expect(ref.mock.calls[0][0]).toBeInstanceOf(HTMLDivElement);
expect(result).toBe(ref.mock.calls[0][0]);
Renderer.unmountComponentAtNode(container);
ReactDOM.unmountComponentAtNode(container);
expect(ref).toHaveBeenCalledTimes(2);
expect(ref.mock.calls[1][0]).toBe(null);

Expand All @@ -447,7 +443,7 @@ describe('root level refs', () => {

inst = null;
ref = jest.fn(value => inst = value);
result = Renderer.render(<Comp ref={ref}/>, container);
result = ReactDOM.render(<Comp ref={ref}/>, container);

expect(ref).toHaveBeenCalledTimes(1);
expect(inst).toBeInstanceOf(Comp);
Expand All @@ -457,20 +453,20 @@ describe('root level refs', () => {
expect(result.method()).toBe(true);
expect(inst.method()).toBe(true);

Renderer.unmountComponentAtNode(container);
ReactDOM.unmountComponentAtNode(container);
expect(ref).toHaveBeenCalledTimes(2);
expect(ref.mock.calls[1][0]).toBe(null);

if (which === 'ReactDOMFiber') {
if (ReactDOMFeatureFlags.useFiber) {
// fragment
inst = null;
ref = jest.fn(value => inst = value);
var divInst = null;
var ref2 = jest.fn(value => divInst = value);
result = Renderer.render([
<Comp ref={ref}/>,
result = ReactDOM.render([
<Comp ref={ref} key="a" />,
5,
<div ref={ref2}>Hello</div>,
<div ref={ref2} key="b">Hello</div>,
], container);

// first call should be `Comp`
Expand All @@ -481,19 +477,20 @@ describe('root level refs', () => {
expect(ref2).toHaveBeenCalledTimes(1);
expect(divInst).toBeInstanceOf(HTMLDivElement);
expect(result).not.toBe(divInst);
Renderer.unmountComponentAtNode(container);

ReactDOM.unmountComponentAtNode(container);
expect(ref).toHaveBeenCalledTimes(2);
expect(ref.mock.calls[1][0]).toBe(null);
expect(ref2).toHaveBeenCalledTimes(2);
expect(ref2.mock.calls[1][0]).toBe(null);

// null
result = Renderer.render(null, container);
result = ReactDOM.render(null, container);
expect(result).toBe(null);

// primitives
// result = Renderer.render(5, container);
// expect(result).toBe('5');
result = ReactDOM.render(5, container);
expect(result).toBeInstanceOf(Text);
}
};
});
});