mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Change warnings to use expectDev
This commit is contained in:
@@ -75,8 +75,8 @@ describe('ReactFragment', () => {
|
||||
|
||||
ReactFragment.create({1: <span />, 2: <span />});
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Child objects should have non-numeric keys so ordering is preserved.'
|
||||
);
|
||||
});
|
||||
@@ -84,8 +84,8 @@ describe('ReactFragment', () => {
|
||||
it('should warn if passing null to createFragment', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactFragment.create(null);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'React.addons.createFragment only accepts a single object.'
|
||||
);
|
||||
});
|
||||
@@ -93,8 +93,8 @@ describe('ReactFragment', () => {
|
||||
it('should warn if passing an array to createFragment', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactFragment.create([]);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'React.addons.createFragment only accepts a single object.'
|
||||
);
|
||||
});
|
||||
@@ -102,8 +102,8 @@ describe('ReactFragment', () => {
|
||||
it('should warn if passing a ReactElement to createFragment', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactFragment.create(<div />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'React.addons.createFragment does not accept a ReactElement without a ' +
|
||||
'wrapper object.'
|
||||
);
|
||||
|
||||
@@ -45,7 +45,7 @@ describe('ReactCSSTransitionGroup', () => {
|
||||
);
|
||||
|
||||
// Warning about the missing transitionLeaveTimeout prop
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should not warn if timeouts is zero', () => {
|
||||
@@ -61,7 +61,7 @@ describe('ReactCSSTransitionGroup', () => {
|
||||
container
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should clean-up silently after the timeout elapses', () => {
|
||||
@@ -103,7 +103,7 @@ describe('ReactCSSTransitionGroup', () => {
|
||||
}
|
||||
|
||||
// No warnings
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
// The leaving child has been removed
|
||||
expect(ReactDOM.findDOMNode(a).childNodes.length).toBe(1);
|
||||
|
||||
@@ -21,7 +21,7 @@ describe('ReactTransitionGroup', () => {
|
||||
var container;
|
||||
|
||||
function normalizeCodeLocInfo(str) {
|
||||
return str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -308,14 +308,14 @@ describe('ReactTransitionGroup', () => {
|
||||
|
||||
ReactDOM.render(<Component />, container);
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: flattenChildren(...): ' +
|
||||
'Encountered two children with the same key, `1`. ' +
|
||||
'Child keys must be unique; when two children share a key, ' +
|
||||
'only the first child will be used.'
|
||||
);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
|
||||
'Warning: flattenChildren(...): ' +
|
||||
'Encountered two children with the same key, `1`. ' +
|
||||
'Child keys must be unique; when two children share a key, ' +
|
||||
|
||||
@@ -23,7 +23,7 @@ var ReactTestUtils;
|
||||
|
||||
describe('ReactContextValidator', () => {
|
||||
function normalizeCodeLocInfo(str) {
|
||||
return str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -146,8 +146,8 @@ describe('ReactContextValidator', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Component />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: Failed context type: ' +
|
||||
'The context `foo` is marked as required in `Component`, but its value ' +
|
||||
'is `undefined`.\n' +
|
||||
@@ -175,7 +175,7 @@ describe('ReactContextValidator', () => {
|
||||
);
|
||||
|
||||
// Previous call should not error
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
var ComponentInFooNumberContext = React.createClass({
|
||||
childContextTypes: {
|
||||
@@ -195,8 +195,8 @@ describe('ReactContextValidator', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<ComponentInFooNumberContext fooValue={123} />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
|
||||
'Warning: Failed context type: ' +
|
||||
'Invalid context `foo` of type `number` supplied ' +
|
||||
'to `Component`, expected `string`.\n' +
|
||||
@@ -224,8 +224,8 @@ describe('ReactContextValidator', () => {
|
||||
});
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Component testContext={{bar: 123}} />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: Failed childContext type: ' +
|
||||
'The child context `foo` is marked as required in `Component`, but its ' +
|
||||
'value is `undefined`.\n' +
|
||||
@@ -234,8 +234,8 @@ describe('ReactContextValidator', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Component testContext={{foo: 123}} />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
|
||||
'Warning: Failed childContext type: ' +
|
||||
'Invalid child context `foo` of type `number` ' +
|
||||
'supplied to `Component`, expected `string`.\n' +
|
||||
@@ -251,7 +251,7 @@ describe('ReactContextValidator', () => {
|
||||
);
|
||||
|
||||
// Previous calls should not log errors
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -123,8 +123,8 @@ describe('autobinding', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<TestBindComponent />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: bind(): You are binding a component method to the component. ' +
|
||||
'React does this for you automatically in a high-performance ' +
|
||||
'way, so you can safely remove this call. See TestBindComponent'
|
||||
@@ -151,7 +151,7 @@ describe('autobinding', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<TestBindComponent />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -186,7 +186,7 @@ describe('autobind optout', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<TestBindComponent />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warn if you pass an manually bound method to setState', () => {
|
||||
@@ -210,7 +210,7 @@ describe('autobind optout', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<TestBindComponent />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -69,8 +69,8 @@ describe('ReactClass-spec', () => {
|
||||
return <span>{this.props.prop}</span>;
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Component: prop type `prop` is invalid; ' +
|
||||
'it must be a function, usually from React.PropTypes.'
|
||||
);
|
||||
@@ -87,8 +87,8 @@ describe('ReactClass-spec', () => {
|
||||
return <span>{this.props.prop}</span>;
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Component: context type `prop` is invalid; ' +
|
||||
'it must be a function, usually from React.PropTypes.'
|
||||
);
|
||||
@@ -105,8 +105,8 @@ describe('ReactClass-spec', () => {
|
||||
return <span>{this.props.prop}</span>;
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Component: child context type `prop` is invalid; ' +
|
||||
'it must be a function, usually from React.PropTypes.'
|
||||
);
|
||||
@@ -123,8 +123,8 @@ describe('ReactClass-spec', () => {
|
||||
return <div />;
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: A component has a method called componentShouldUpdate(). Did you ' +
|
||||
'mean shouldComponentUpdate()? The name is phrased as a question ' +
|
||||
'because the function is expected to return a value.'
|
||||
@@ -139,8 +139,8 @@ describe('ReactClass-spec', () => {
|
||||
return <div />;
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(1)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toBe(
|
||||
'Warning: NamedComponent has a method called componentShouldUpdate(). Did you ' +
|
||||
'mean shouldComponentUpdate()? The name is phrased as a question ' +
|
||||
'because the function is expected to return a value.'
|
||||
@@ -157,8 +157,8 @@ describe('ReactClass-spec', () => {
|
||||
return <div />;
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: A component has a method called componentWillRecieveProps(). Did you ' +
|
||||
'mean componentWillReceiveProps()?'
|
||||
);
|
||||
@@ -206,20 +206,20 @@ describe('ReactClass-spec', () => {
|
||||
return <div />;
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(4);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(4);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'createClass(...): `mixins` is now a static property and should ' +
|
||||
'be defined inside "statics".'
|
||||
);
|
||||
expect(console.error.calls.argsFor(1)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toBe(
|
||||
'createClass(...): `propTypes` is now a static property and should ' +
|
||||
'be defined inside "statics".'
|
||||
);
|
||||
expect(console.error.calls.argsFor(2)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(2)[0]).toBe(
|
||||
'createClass(...): `contextTypes` is now a static property and ' +
|
||||
'should be defined inside "statics".'
|
||||
);
|
||||
expect(console.error.calls.argsFor(3)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(3)[0]).toBe(
|
||||
'createClass(...): `childContextTypes` is now a static property and ' +
|
||||
'should be defined inside "statics".'
|
||||
);
|
||||
@@ -343,8 +343,8 @@ describe('ReactClass-spec', () => {
|
||||
});
|
||||
|
||||
expect(() => Component()).toThrow();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Something is calling a React component directly. Use a ' +
|
||||
'factory or JSX instead. See: https://fb.me/react-legacyfactory'
|
||||
);
|
||||
|
||||
@@ -321,8 +321,8 @@ describe('ReactClass-mixin', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: ReactClass: You\'re attempting to include a mixin that is ' +
|
||||
'either null or not an object. Check the mixins included by the ' +
|
||||
'component, as well as any mixins they include themselves. ' +
|
||||
@@ -341,8 +341,8 @@ describe('ReactClass-mixin', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: ReactClass: You\'re attempting to include a mixin that is ' +
|
||||
'either null or not an object. Check the mixins included by the ' +
|
||||
'component, as well as any mixins they include themselves. ' +
|
||||
@@ -365,8 +365,8 @@ describe('ReactClass-mixin', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: ReactClass: You\'re attempting to include a mixin that is ' +
|
||||
'either null or not an object. Check the mixins included by the ' +
|
||||
'component, as well as any mixins they include themselves. ' +
|
||||
@@ -389,8 +389,8 @@ describe('ReactClass-mixin', () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: ReactClass: You\'re attempting to include a mixin that is ' +
|
||||
'either null or not an object. Check the mixins included by the ' +
|
||||
'component, as well as any mixins they include themselves. ' +
|
||||
|
||||
@@ -76,10 +76,10 @@ describe('ReactElement', () => {
|
||||
);
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
ReactDOM.render(<Parent />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Child: `key` is not a prop. Trying to access it will result ' +
|
||||
'in `undefined` being returned. If you need to access the same ' +
|
||||
'value within the child component, you should pass it as a different ' +
|
||||
@@ -106,10 +106,10 @@ describe('ReactElement', () => {
|
||||
);
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
ReactDOM.render(<Parent />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Child: `key` is not a prop. Trying to access it will result ' +
|
||||
'in `undefined` being returned. If you need to access the same ' +
|
||||
'value within the child component, you should pass it as a different ' +
|
||||
@@ -120,10 +120,10 @@ describe('ReactElement', () => {
|
||||
it('should warn when `key` is being accessed on a host element', () => {
|
||||
spyOn(console, 'error');
|
||||
var element = <div key="3" />;
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
void element.props.key;
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'div: `key` is not a prop. Trying to access it will result ' +
|
||||
'in `undefined` being returned. If you need to access the same ' +
|
||||
'value within the child component, you should pass it as a different ' +
|
||||
@@ -148,10 +148,10 @@ describe('ReactElement', () => {
|
||||
);
|
||||
},
|
||||
});
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
ReactDOM.render(<Parent />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Child: `ref` is not a prop. Trying to access it will result ' +
|
||||
'in `undefined` being returned. If you need to access the same ' +
|
||||
'value within the child component, you should pass it as a different ' +
|
||||
@@ -280,7 +280,7 @@ describe('ReactElement', () => {
|
||||
children: 'text',
|
||||
}, a);
|
||||
expect(element.props.children).toBe(a);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not override children if no rest args are provided', () => {
|
||||
@@ -289,7 +289,7 @@ describe('ReactElement', () => {
|
||||
children: 'text',
|
||||
});
|
||||
expect(element.props.children).toBe('text');
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('overrides children if null is provided as an argument', () => {
|
||||
@@ -298,7 +298,7 @@ describe('ReactElement', () => {
|
||||
children: 'text',
|
||||
}, null);
|
||||
expect(element.props.children).toBe(null);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('merges rest arguments onto the children prop in an array', () => {
|
||||
@@ -308,7 +308,7 @@ describe('ReactElement', () => {
|
||||
var c = 3;
|
||||
var element = React.createFactory(ComponentClass)(null, a, b, c);
|
||||
expect(element.props.children).toEqual([1, 2, 3]);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
// NOTE: We're explicitly not using JSX here. This is intended to test
|
||||
@@ -332,7 +332,7 @@ describe('ReactElement', () => {
|
||||
|
||||
var element = React.createElement(StaticMethodComponentClass);
|
||||
expect(element.type.someStaticMethod()).toBe('someReturnValue');
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
// NOTE: We're explicitly not using JSX here. This is intended to test
|
||||
@@ -477,7 +477,7 @@ describe('ReactElement', () => {
|
||||
});
|
||||
var test = ReactTestUtils.renderIntoDocument(<Test value={+undefined} />);
|
||||
expect(test.props.value).toBeNaN();
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
// NOTE: We're explicitly not using JSX here. This is intended to test
|
||||
|
||||
@@ -250,8 +250,8 @@ describe('ReactElementClone', () => {
|
||||
|
||||
React.cloneElement(<div />, null, [<div />, <div />]);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Each child in an array or iterator should have a unique "key" prop.'
|
||||
);
|
||||
});
|
||||
@@ -261,7 +261,7 @@ describe('ReactElementClone', () => {
|
||||
|
||||
React.cloneElement(<div />, null, [<div key="#1" />, <div key="#2" />]);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warn when the element is directly in rest args', () => {
|
||||
@@ -269,7 +269,7 @@ describe('ReactElementClone', () => {
|
||||
|
||||
React.cloneElement(<div />, null, <div />, <div />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warn when the array contains a non-element', () => {
|
||||
@@ -277,7 +277,7 @@ describe('ReactElementClone', () => {
|
||||
|
||||
React.cloneElement(<div />, null, [{}, {}]);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should check declared prop types after clone', () => {
|
||||
@@ -304,8 +304,8 @@ describe('ReactElementClone', () => {
|
||||
},
|
||||
});
|
||||
ReactTestUtils.renderIntoDocument(React.createElement(GrandParent));
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Failed prop type: ' +
|
||||
'Invalid prop `color` of type `number` supplied to `Component`, ' +
|
||||
'expected `string`.\n' +
|
||||
|
||||
@@ -20,7 +20,7 @@ var ReactTestUtils;
|
||||
|
||||
describe('ReactElementValidator', () => {
|
||||
function normalizeCodeLocInfo(str) {
|
||||
return str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
}
|
||||
|
||||
var ComponentClass;
|
||||
@@ -44,8 +44,8 @@ describe('ReactElementValidator', () => {
|
||||
|
||||
Component(null, [Component(), Component()]);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Each child in an array or iterator should have a unique "key" prop.'
|
||||
);
|
||||
});
|
||||
@@ -74,8 +74,8 @@ describe('ReactElementValidator', () => {
|
||||
React.createElement(ComponentWrapper)
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Each child in an array or iterator should have a unique "key" prop. ' +
|
||||
'Check the render method of `InnerClass`. ' +
|
||||
'It was passed a child from ComponentWrapper. '
|
||||
@@ -98,8 +98,8 @@ describe('ReactElementValidator', () => {
|
||||
];
|
||||
ReactTestUtils.renderIntoDocument(<Anonymous>{divs}</Anonymous>);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: Each child in an array or iterator should have a unique ' +
|
||||
'"key" prop. See https://fb.me/react-warning-keys for more information.\n' +
|
||||
' in div (at **)'
|
||||
@@ -115,8 +115,8 @@ describe('ReactElementValidator', () => {
|
||||
];
|
||||
ReactTestUtils.renderIntoDocument(<div>{divs}</div>);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: Each child in an array or iterator should have a unique ' +
|
||||
'"key" prop. Check the top-level render call using <div>. See ' +
|
||||
'https://fb.me/react-warning-keys for more information.\n' +
|
||||
@@ -147,8 +147,8 @@ describe('ReactElementValidator', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<GrandParent />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: Each child in an array or iterator should have a unique ' +
|
||||
'"key" prop. Check the render method of `Component`. See ' +
|
||||
'https://fb.me/react-warning-keys for more information.\n' +
|
||||
@@ -180,7 +180,7 @@ describe('ReactElementValidator', () => {
|
||||
</Wrapper>
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('warns for keys for iterables of elements in rest args', () => {
|
||||
@@ -201,8 +201,8 @@ describe('ReactElementValidator', () => {
|
||||
|
||||
Component(null, iterable);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Each child in an array or iterator should have a unique "key" prop.'
|
||||
);
|
||||
});
|
||||
@@ -213,7 +213,7 @@ describe('ReactElementValidator', () => {
|
||||
|
||||
Component(null, [Component({key: '#1'}), Component({key: '#2'})]);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warns for iterable elements with keys', () => {
|
||||
@@ -237,7 +237,7 @@ describe('ReactElementValidator', () => {
|
||||
|
||||
Component(null, iterable);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warn when the element is directly in rest args', () => {
|
||||
@@ -246,7 +246,7 @@ describe('ReactElementValidator', () => {
|
||||
|
||||
Component(null, Component(), Component());
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warn when the array contains a non-element', () => {
|
||||
@@ -255,7 +255,7 @@ describe('ReactElementValidator', () => {
|
||||
|
||||
Component(null, [{}, {}]);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
// TODO: These warnings currently come from the composite component, but
|
||||
@@ -280,7 +280,7 @@ describe('ReactElementValidator', () => {
|
||||
},
|
||||
});
|
||||
ReactTestUtils.renderIntoDocument(React.createElement(ParentComp));
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Failed prop type: ' +
|
||||
'Invalid prop `color` of type `number` supplied to `MyComp`, ' +
|
||||
'expected `string`.\n' +
|
||||
@@ -295,29 +295,29 @@ describe('ReactElementValidator', () => {
|
||||
React.createElement(null);
|
||||
React.createElement(true);
|
||||
React.createElement(123);
|
||||
expect(console.error.calls.count()).toBe(4);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(4);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: React.createElement: type should not be null, undefined, ' +
|
||||
'boolean, or number. It should be a string (for DOM elements) or a ' +
|
||||
'ReactClass (for composite components).'
|
||||
);
|
||||
expect(console.error.calls.argsFor(1)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toBe(
|
||||
'Warning: React.createElement: type should not be null, undefined, ' +
|
||||
'boolean, or number. It should be a string (for DOM elements) or a ' +
|
||||
'ReactClass (for composite components).'
|
||||
);
|
||||
expect(console.error.calls.argsFor(2)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(2)[0]).toBe(
|
||||
'Warning: React.createElement: type should not be null, undefined, ' +
|
||||
'boolean, or number. It should be a string (for DOM elements) or a ' +
|
||||
'ReactClass (for composite components).'
|
||||
);
|
||||
expect(console.error.calls.argsFor(3)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(3)[0]).toBe(
|
||||
'Warning: React.createElement: type should not be null, undefined, ' +
|
||||
'boolean, or number. It should be a string (for DOM elements) or a ' +
|
||||
'ReactClass (for composite components).'
|
||||
);
|
||||
React.createElement('div');
|
||||
expect(console.error.calls.count()).toBe(4);
|
||||
expectDev(console.error.calls.count()).toBe(4);
|
||||
});
|
||||
|
||||
it('includes the owner name when passing null, undefined, boolean, or number', () => {
|
||||
@@ -334,8 +334,8 @@ describe('ReactElementValidator', () => {
|
||||
'or a class/function (for composite components) but got: null. Check ' +
|
||||
'the render method of `ParentComp`.'
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: React.createElement: type should not be null, undefined, ' +
|
||||
'boolean, or number. It should be a string (for DOM elements) or a ' +
|
||||
'ReactClass (for composite components). Check the render method of ' +
|
||||
@@ -358,8 +358,8 @@ describe('ReactElementValidator', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(React.createElement(Component));
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Failed prop type: The prop `prop` is marked as required in ' +
|
||||
'`Component`, but its value is `null`.\n' +
|
||||
' in Component'
|
||||
@@ -383,8 +383,8 @@ describe('ReactElementValidator', () => {
|
||||
React.createElement(Component, {prop:null})
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Failed prop type: The prop `prop` is marked as required in ' +
|
||||
'`Component`, but its value is `null`.\n' +
|
||||
' in Component'
|
||||
@@ -410,15 +410,15 @@ describe('ReactElementValidator', () => {
|
||||
React.createElement(Component, {prop: 42})
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Failed prop type: ' +
|
||||
'The prop `prop` is marked as required in `Component`, but its value ' +
|
||||
'is `undefined`.\n' +
|
||||
' in Component'
|
||||
);
|
||||
|
||||
expect(console.error.calls.argsFor(1)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toBe(
|
||||
'Warning: Failed prop type: ' +
|
||||
'Invalid prop `prop` of type `number` supplied to ' +
|
||||
'`Component`, expected `string`.\n' +
|
||||
@@ -430,7 +430,7 @@ describe('ReactElementValidator', () => {
|
||||
);
|
||||
|
||||
// Should not error for strings
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
});
|
||||
|
||||
it('should warn if a PropType creator is used as a PropType', () => {
|
||||
@@ -449,8 +449,8 @@ describe('ReactElementValidator', () => {
|
||||
React.createElement(Component, {myProp: {value: 'hi'}})
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Component: type specification of prop `myProp` is invalid; ' +
|
||||
'the type checker function must return `null` or an `Error` but ' +
|
||||
'returned a function. You may have forgotten to pass an argument to ' +
|
||||
@@ -468,14 +468,14 @@ describe('ReactElementValidator', () => {
|
||||
});
|
||||
var TestFactory = React.createFactory(TestComponent);
|
||||
expect(TestFactory.type).toBe(TestComponent);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Factory.type is deprecated. Access the class directly before ' +
|
||||
'passing it to createFactory.'
|
||||
);
|
||||
// Warn once, not again
|
||||
expect(TestFactory.type).toBe(TestComponent);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('does not warn when using DOM node as children', () => {
|
||||
@@ -492,7 +492,7 @@ describe('ReactElementValidator', () => {
|
||||
var node = document.createElement('div');
|
||||
// This shouldn't cause a stack overflow or any other problems (#3883)
|
||||
ReactTestUtils.renderIntoDocument(<DOMContainer>{node}</DOMContainer>);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should not enumerate enumerable numbers (#4776)', () => {
|
||||
@@ -535,8 +535,8 @@ describe('ReactElementValidator', () => {
|
||||
spyOn(console, 'error');
|
||||
var Foo = undefined;
|
||||
void <Foo>{[<div />]}</Foo>;
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: React.createElement: type should not be null, undefined, ' +
|
||||
'boolean, or number. It should be a string (for DOM elements) or a ' +
|
||||
'ReactClass (for composite components).'
|
||||
|
||||
@@ -310,7 +310,7 @@ describe('ReactPropTypes', () => {
|
||||
var instance = <Component label={<div />} />;
|
||||
instance = ReactTestUtils.renderIntoDocument(instance);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should warn when passing no label and isRequired is set', () => {
|
||||
@@ -319,7 +319,7 @@ describe('ReactPropTypes', () => {
|
||||
var instance = <Component />;
|
||||
instance = ReactTestUtils.renderIntoDocument(instance);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should be implicitly optional and not warn without values', () => {
|
||||
@@ -454,7 +454,7 @@ describe('ReactPropTypes', () => {
|
||||
k4: null,
|
||||
k5: undefined,
|
||||
}));
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should not warn for iterables', () => {
|
||||
@@ -612,8 +612,8 @@ describe('ReactPropTypes', () => {
|
||||
|
||||
PropTypes.oneOf('red', 'blue');
|
||||
|
||||
expect(console.error).toHaveBeenCalled();
|
||||
expect(console.error.calls.argsFor(0)[0])
|
||||
expectDev(console.error).toHaveBeenCalled();
|
||||
expectDev(console.error.calls.argsFor(0)[0])
|
||||
.toContain('Invalid argument supplied to oneOf, expected an instance of array.');
|
||||
|
||||
typeCheckPass(PropTypes.oneOf('red', 'blue'), 'red');
|
||||
@@ -668,8 +668,8 @@ describe('ReactPropTypes', () => {
|
||||
|
||||
PropTypes.oneOfType(PropTypes.string, PropTypes.number);
|
||||
|
||||
expect(console.error).toHaveBeenCalled();
|
||||
expect(console.error.calls.argsFor(0)[0])
|
||||
expectDev(console.error).toHaveBeenCalled();
|
||||
expectDev(console.error.calls.argsFor(0)[0])
|
||||
.toContain('Invalid argument supplied to oneOfType, expected an instance of array.');
|
||||
|
||||
typeCheckPass(PropTypes.oneOf(PropTypes.string, PropTypes.number), []);
|
||||
@@ -893,7 +893,7 @@ describe('ReactPropTypes', () => {
|
||||
|
||||
var instance = <Component num={6} />;
|
||||
instance = ReactTestUtils.renderIntoDocument(instance);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(
|
||||
console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
|
||||
).toBe(
|
||||
@@ -920,7 +920,7 @@ describe('ReactPropTypes', () => {
|
||||
|
||||
var instance = <Component num={5} />;
|
||||
instance = ReactTestUtils.renderIntoDocument(instance);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
@@ -100,21 +100,21 @@ describe('ReactJSXElement', () => {
|
||||
var a = 1;
|
||||
var element = <Component children="text">{a}</Component>;
|
||||
expect(element.props.children).toBe(a);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not override children if no JSX children are provided', () => {
|
||||
spyOn(console, 'error');
|
||||
var element = <Component children="text" />;
|
||||
expect(element.props.children).toBe('text');
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('overrides children if null is provided as a JSX child', () => {
|
||||
spyOn(console, 'error');
|
||||
var element = <Component children="text">{null}</Component>;
|
||||
expect(element.props.children).toBe(null);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('overrides children if undefined is provided as an argument', () => {
|
||||
@@ -136,7 +136,7 @@ describe('ReactJSXElement', () => {
|
||||
var c = 3;
|
||||
var element = <Component>{a}{b}{c}</Component>;
|
||||
expect(element.props.children).toEqual([1, 2, 3]);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('allows static methods to be called using the type property', () => {
|
||||
@@ -153,7 +153,7 @@ describe('ReactJSXElement', () => {
|
||||
|
||||
var element = <StaticMethodComponent />;
|
||||
expect(element.type.someStaticMethod()).toBe('someReturnValue');
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('identifies valid elements', () => {
|
||||
|
||||
@@ -47,8 +47,8 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
void <Component>{[<Component />, <Component />]}</Component>;
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Each child in an array or iterator should have a unique "key" prop.'
|
||||
);
|
||||
});
|
||||
@@ -74,8 +74,8 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<ComponentWrapper />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Each child in an array or iterator should have a unique "key" prop. ' +
|
||||
'Check the render method of `InnerComponent`. ' +
|
||||
'It was passed a child from ComponentWrapper. '
|
||||
@@ -99,8 +99,8 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
void <Component>{iterable}</Component>;
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Each child in an array or iterator should have a unique "key" prop.'
|
||||
);
|
||||
});
|
||||
@@ -110,7 +110,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
void <Component>{[<Component key="#1" />, <Component key="#2" />]}</Component>;
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warns for iterable elements with keys', () => {
|
||||
@@ -133,7 +133,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
void <Component>{iterable}</Component>;
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warn for numeric keys in entry iterable as a child', () => {
|
||||
@@ -154,7 +154,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
void <Component>{iterable}</Component>;
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warn when the element is directly as children', () => {
|
||||
@@ -162,7 +162,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
void <Component><Component /><Component /></Component>;
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('does not warn when the child array contains non-elements', () => {
|
||||
@@ -170,7 +170,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
void <Component>{[{}, {}]}</Component>;
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
// TODO: These warnings currently come from the composite component, but
|
||||
@@ -217,25 +217,25 @@ describe('ReactJSXElementValidator', () => {
|
||||
void <Null />;
|
||||
void <True />;
|
||||
void <Num />;
|
||||
expect(console.error.calls.count()).toBe(4);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(4);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'type should not be null, undefined, boolean, or number. It should be ' +
|
||||
'a string (for DOM elements) or a ReactClass (for composite components).'
|
||||
);
|
||||
expect(console.error.calls.argsFor(1)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toContain(
|
||||
'type should not be null, undefined, boolean, or number. It should be ' +
|
||||
'a string (for DOM elements) or a ReactClass (for composite components).'
|
||||
);
|
||||
expect(console.error.calls.argsFor(2)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(2)[0]).toContain(
|
||||
'type should not be null, undefined, boolean, or number. It should be ' +
|
||||
'a string (for DOM elements) or a ReactClass (for composite components).'
|
||||
);
|
||||
expect(console.error.calls.argsFor(3)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(3)[0]).toContain(
|
||||
'type should not be null, undefined, boolean, or number. It should be ' +
|
||||
'a string (for DOM elements) or a ReactClass (for composite components).'
|
||||
);
|
||||
void <Div />;
|
||||
expect(console.error.calls.count()).toBe(4);
|
||||
expectDev(console.error.calls.count()).toBe(4);
|
||||
});
|
||||
|
||||
it('should check default prop values', () => {
|
||||
@@ -245,7 +245,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<RequiredPropComponent />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(
|
||||
console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
|
||||
).toBe(
|
||||
@@ -260,7 +260,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<RequiredPropComponent prop={null} />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(
|
||||
console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
|
||||
).toBe(
|
||||
@@ -276,7 +276,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
ReactTestUtils.renderIntoDocument(<RequiredPropComponent />);
|
||||
ReactTestUtils.renderIntoDocument(<RequiredPropComponent prop={42} />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expect(
|
||||
console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
|
||||
).toBe(
|
||||
@@ -298,7 +298,7 @@ describe('ReactJSXElementValidator', () => {
|
||||
ReactTestUtils.renderIntoDocument(<RequiredPropComponent prop="string" />);
|
||||
|
||||
// Should not error for strings
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
});
|
||||
|
||||
it('should warn on invalid prop types', () => {
|
||||
@@ -316,8 +316,8 @@ describe('ReactJSXElementValidator', () => {
|
||||
prop: null,
|
||||
};
|
||||
ReactTestUtils.renderIntoDocument(<NullPropTypeComponent />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'NullPropTypeComponent: prop type `prop` is invalid; it must be a ' +
|
||||
'function, usually from React.PropTypes.'
|
||||
);
|
||||
@@ -334,8 +334,8 @@ describe('ReactJSXElementValidator', () => {
|
||||
prop: null,
|
||||
};
|
||||
ReactTestUtils.renderIntoDocument(<NullContextTypeComponent />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'NullContextTypeComponent: context type `prop` is invalid; it must ' +
|
||||
'be a function, usually from React.PropTypes.'
|
||||
);
|
||||
@@ -352,8 +352,8 @@ describe('ReactJSXElementValidator', () => {
|
||||
prop: 'foo',
|
||||
});
|
||||
ReactTestUtils.renderIntoDocument(<GetDefaultPropsComponent />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'getDefaultProps is only used on classic React.createClass definitions.' +
|
||||
' Use a static property named `defaultProps` instead.'
|
||||
);
|
||||
|
||||
@@ -36,7 +36,7 @@ describe('ReactDOMProduction', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
warning(false, 'Do cows go moo?');
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should use prod React', () => {
|
||||
@@ -45,7 +45,7 @@ describe('ReactDOMProduction', () => {
|
||||
// no key warning
|
||||
void <div>{[<span />]}</div>;
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should handle a simple flow', () => {
|
||||
|
||||
@@ -119,8 +119,8 @@ describe('CSSPropertyOperations', () => {
|
||||
spyOn(console, 'error');
|
||||
var root = document.createElement('div');
|
||||
ReactDOM.render(<Comp />, root);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: Unsupported style property background-color. Did you mean backgroundColor? ' +
|
||||
'Check the render method of `Comp`.'
|
||||
);
|
||||
@@ -144,12 +144,12 @@ describe('CSSPropertyOperations', () => {
|
||||
ReactDOM.render(<Comp />, root);
|
||||
ReactDOM.render(<Comp style={styles} />, root);
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: Unsupported style property -ms-transform. Did you mean msTransform? ' +
|
||||
'Check the render method of `Comp`.'
|
||||
);
|
||||
expect(console.error.calls.argsFor(1)[0]).toEqual(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toEqual(
|
||||
'Warning: Unsupported style property -webkit-transform. Did you mean WebkitTransform? ' +
|
||||
'Check the render method of `Comp`.'
|
||||
);
|
||||
@@ -172,12 +172,12 @@ describe('CSSPropertyOperations', () => {
|
||||
var root = document.createElement('div');
|
||||
ReactDOM.render(<Comp />, root);
|
||||
// msTransform is correct already and shouldn't warn
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: Unsupported vendor-prefixed style property oTransform. ' +
|
||||
'Did you mean OTransform? Check the render method of `Comp`.'
|
||||
);
|
||||
expect(console.error.calls.argsFor(1)[0]).toEqual(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toEqual(
|
||||
'Warning: Unsupported vendor-prefixed style property webkitTransform. ' +
|
||||
'Did you mean WebkitTransform? Check the render method of `Comp`.'
|
||||
);
|
||||
@@ -200,12 +200,12 @@ describe('CSSPropertyOperations', () => {
|
||||
spyOn(console, 'error');
|
||||
var root = document.createElement('div');
|
||||
ReactDOM.render(<Comp />, root);
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: Style property values shouldn\'t contain a semicolon. ' +
|
||||
'Check the render method of `Comp`. Try "backgroundColor: blue" instead.',
|
||||
);
|
||||
expect(console.error.calls.argsFor(1)[0]).toEqual(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toEqual(
|
||||
'Warning: Style property values shouldn\'t contain a semicolon. ' +
|
||||
'Check the render method of `Comp`. Try "color: red" instead.',
|
||||
);
|
||||
@@ -224,8 +224,8 @@ describe('CSSPropertyOperations', () => {
|
||||
var root = document.createElement('div');
|
||||
ReactDOM.render(<Comp />, root);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: `NaN` is an invalid value for the `fontSize` css style property. ' +
|
||||
'Check the render method of `Comp`.'
|
||||
);
|
||||
|
||||
@@ -269,7 +269,7 @@ describe('ReactBrowserEventEmitter', () => {
|
||||
expect(idCallOrder[0]).toBe(getInternal(CHILD));
|
||||
expect(idCallOrder[1]).toBe(getInternal(PARENT));
|
||||
expect(idCallOrder[2]).toBe(getInternal(GRANDPARENT));
|
||||
expect(console.error.calls.count()).toEqual(0);
|
||||
expectDev(console.error.calls.count()).toEqual(0);
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,7 +20,7 @@ describe('ReactDOMComponent', () => {
|
||||
var inputValueTracking;
|
||||
|
||||
function normalizeCodeLocInfo(str) {
|
||||
return str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -128,8 +128,8 @@ describe('ReactDOMComponent', () => {
|
||||
var stub = ReactTestUtils.renderIntoDocument(<App />);
|
||||
style.position = 'absolute';
|
||||
stub.setState({style: style});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: `div` was passed a style object that has previously been ' +
|
||||
'mutated. Mutating `style` is deprecated. Consider cloning it ' +
|
||||
'beforehand. Check the `render` of `App`. Previous style: ' +
|
||||
@@ -142,22 +142,22 @@ describe('ReactDOMComponent', () => {
|
||||
style.background = 'green';
|
||||
stub.setState({style: {background: 'green'}});
|
||||
// already warned once for the same component and owner
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
style = {background: 'red'};
|
||||
var div = document.createElement('div');
|
||||
ReactDOM.render(<span style={style}></span>, div);
|
||||
style.background = 'blue';
|
||||
ReactDOM.render(<span style={style}></span>, div);
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
});
|
||||
|
||||
it('should warn for unknown prop', () => {
|
||||
spyOn(console, 'error');
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(<div foo="bar" />, container);
|
||||
expect(console.error.calls.count(0)).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count(0)).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: Unknown prop `foo` on <div> tag. Remove this prop from the element. ' +
|
||||
'For details, see https://fb.me/react-unknown-prop\n in div (at **)'
|
||||
);
|
||||
@@ -167,8 +167,8 @@ describe('ReactDOMComponent', () => {
|
||||
spyOn(console, 'error');
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(<div foo="bar" baz="qux" />, container);
|
||||
expect(console.error.calls.count(0)).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count(0)).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: Unknown props `foo`, `baz` on <div> tag. Remove these props from the element. ' +
|
||||
'For details, see https://fb.me/react-unknown-prop\n in div (at **)'
|
||||
);
|
||||
@@ -178,8 +178,8 @@ describe('ReactDOMComponent', () => {
|
||||
spyOn(console, 'error');
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(<div onDblClick={() => {}} />, container);
|
||||
expect(console.error.calls.count(0)).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count(0)).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: Unknown event handler property onDblClick. Did you mean `onDoubleClick`?\n in div (at **)'
|
||||
);
|
||||
});
|
||||
@@ -194,7 +194,7 @@ describe('ReactDOMComponent', () => {
|
||||
}
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Component />);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should warn nicely about NaN in style', () => {
|
||||
@@ -205,8 +205,8 @@ describe('ReactDOMComponent', () => {
|
||||
ReactDOM.render(<span style={style}></span>, div);
|
||||
ReactDOM.render(<span style={style}></span>, div);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: `NaN` is an invalid value for the `fontSize` css style property.',
|
||||
);
|
||||
});
|
||||
@@ -362,8 +362,8 @@ describe('ReactDOMComponent', () => {
|
||||
);
|
||||
ReactDOM.render(element, container);
|
||||
}
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
|
||||
);
|
||||
});
|
||||
@@ -382,8 +382,8 @@ describe('ReactDOMComponent', () => {
|
||||
);
|
||||
ReactDOM.render(afterUpdate, container);
|
||||
}
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toEqual(
|
||||
'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
|
||||
);
|
||||
});
|
||||
@@ -769,8 +769,8 @@ describe('ReactDOMComponent', () => {
|
||||
errorEvent.initEvent('error', false, false);
|
||||
container.getElementsByTagName('source')[0].dispatchEvent(errorEvent);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'onError called'
|
||||
);
|
||||
});
|
||||
@@ -830,13 +830,13 @@ describe('ReactDOMComponent', () => {
|
||||
});
|
||||
var node = document.createElement('div');
|
||||
ReactDOM.render(<ShadyComponent />, node);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'ShadyComponent is using shady DOM. Using shady DOM with React can ' +
|
||||
'cause things to break subtly.'
|
||||
);
|
||||
mountComponent({is: 'custom-shady-div2'});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
} finally {
|
||||
document.createElement = defaultCreateElement;
|
||||
@@ -858,14 +858,14 @@ describe('ReactDOMComponent', () => {
|
||||
};
|
||||
|
||||
mountComponent({is: 'custom-shady-div'});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is using shady DOM. Using shady DOM with React can ' +
|
||||
'cause things to break subtly.'
|
||||
);
|
||||
|
||||
mountComponent({is: 'custom-shady-div2'});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
} finally {
|
||||
document.createElement = defaultCreateElement;
|
||||
@@ -901,8 +901,8 @@ describe('ReactDOMComponent', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
mountComponent({innerHTML: '<span>Hi Jim!</span>'});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Directly setting property `innerHTML` is not permitted. '
|
||||
);
|
||||
});
|
||||
@@ -934,14 +934,14 @@ describe('ReactDOMComponent', () => {
|
||||
it('should warn about contentEditable and children', () => {
|
||||
spyOn(console, 'error');
|
||||
mountComponent({contentEditable: true, children: ''});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
|
||||
});
|
||||
|
||||
it('should respect suppressContentEditableWarning', () => {
|
||||
spyOn(console, 'error');
|
||||
mountComponent({contentEditable: true, children: '', suppressContentEditableWarning: true});
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should validate against invalid styles', () => {
|
||||
@@ -1106,8 +1106,8 @@ describe('ReactDOMComponent', () => {
|
||||
<div contentEditable={true}><div /></div>,
|
||||
container
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
|
||||
});
|
||||
|
||||
it('should validate against invalid styles', () => {
|
||||
@@ -1237,8 +1237,8 @@ describe('ReactDOMComponent', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
ReactTestUtils.renderIntoDocument(<div onScroll={function() {}} />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: This browser doesn\'t support the `onScroll` event'
|
||||
);
|
||||
});
|
||||
@@ -1246,7 +1246,7 @@ describe('ReactDOMComponent', () => {
|
||||
it('should not warn when server-side rendering `onScroll`', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactDOMServer.renderToString(<div onScroll={() => {}}/>);
|
||||
expect(console.error).not.toHaveBeenCalled();
|
||||
expectDev(console.error).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1283,8 +1283,8 @@ describe('ReactDOMComponent', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactTestUtils.renderIntoDocument(<div><tr /><tr /></div>);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: validateDOMNesting(...): <tr> cannot appear as a child of ' +
|
||||
'<div>. See div > tr.'
|
||||
);
|
||||
@@ -1295,8 +1295,8 @@ describe('ReactDOMComponent', () => {
|
||||
var p = document.createElement('p');
|
||||
ReactDOM.render(<span><p /></span>, p);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: validateDOMNesting(...): <p> cannot appear as a descendant ' +
|
||||
'of <p>. See p > ... > p.'
|
||||
);
|
||||
@@ -1319,17 +1319,17 @@ describe('ReactDOMComponent', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Foo />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(3);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(3);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: validateDOMNesting(...): <tr> cannot appear as a child of ' +
|
||||
'<table>. See Foo > table > Row > tr. Add a <tbody> to your code to ' +
|
||||
'match the DOM tree generated by the browser.'
|
||||
);
|
||||
expect(console.error.calls.argsFor(1)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toBe(
|
||||
'Warning: validateDOMNesting(...): Text nodes cannot appear as a ' +
|
||||
'child of <tr>. See Row > tr > #text.'
|
||||
);
|
||||
expect(console.error.calls.argsFor(2)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(2)[0]).toBe(
|
||||
'Warning: validateDOMNesting(...): Whitespace text nodes cannot ' +
|
||||
'appear as a child of <table>. Make sure you don\'t have any extra ' +
|
||||
'whitespace between tags on each line of your source code. See Foo > ' +
|
||||
@@ -1365,8 +1365,8 @@ describe('ReactDOMComponent', () => {
|
||||
render: () => <Viz1 />,
|
||||
});
|
||||
ReactTestUtils.renderIntoDocument(<App1 />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'See Viz1 > table > FancyRow > Row > tr.'
|
||||
);
|
||||
|
||||
@@ -1377,26 +1377,26 @@ describe('ReactDOMComponent', () => {
|
||||
render: () => <Viz2 />,
|
||||
});
|
||||
ReactTestUtils.renderIntoDocument(<App2 />);
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(1)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toContain(
|
||||
'See Viz2 > FancyTable > Table > table > FancyRow > Row > tr.'
|
||||
);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<FancyTable><FancyRow /></FancyTable>);
|
||||
expect(console.error.calls.count()).toBe(3);
|
||||
expect(console.error.calls.argsFor(2)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(3);
|
||||
expectDev(console.error.calls.argsFor(2)[0]).toContain(
|
||||
'See FancyTable > Table > table > FancyRow > Row > tr.'
|
||||
);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<table><FancyRow /></table>);
|
||||
expect(console.error.calls.count()).toBe(4);
|
||||
expect(console.error.calls.argsFor(3)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(4);
|
||||
expectDev(console.error.calls.argsFor(3)[0]).toContain(
|
||||
'See table > FancyRow > Row > tr.'
|
||||
);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<FancyTable><tr /></FancyTable>);
|
||||
expect(console.error.calls.count()).toBe(5);
|
||||
expect(console.error.calls.argsFor(4)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(5);
|
||||
expectDev(console.error.calls.argsFor(4)[0]).toContain(
|
||||
'See FancyTable > Table > table > tr.'
|
||||
);
|
||||
|
||||
@@ -1407,8 +1407,8 @@ describe('ReactDOMComponent', () => {
|
||||
}
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Link><div><Link /></div></Link>);
|
||||
expect(console.error.calls.count()).toBe(6);
|
||||
expect(console.error.calls.argsFor(5)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(6);
|
||||
expectDev(console.error.calls.argsFor(5)[0]).toContain(
|
||||
'See Link > a > ... > Link > a.'
|
||||
);
|
||||
});
|
||||
@@ -1416,59 +1416,59 @@ describe('ReactDOMComponent', () => {
|
||||
it('should warn about incorrect casing on properties (ssr)', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactDOMServer.renderToString(React.createElement('input', {type: 'text', tabindex: '1'}));
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('tabIndex');
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('tabIndex');
|
||||
});
|
||||
|
||||
it('should warn about incorrect casing on event handlers (ssr)', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactDOMServer.renderToString(React.createElement('input', {type: 'text', onclick: '1'}));
|
||||
ReactDOMServer.renderToString(React.createElement('input', {type: 'text', onKeydown: '1'}));
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('onClick');
|
||||
expect(console.error.calls.argsFor(1)[0]).toContain('onKeyDown');
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('onClick');
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toContain('onKeyDown');
|
||||
});
|
||||
|
||||
it('should warn about incorrect casing on properties', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactTestUtils.renderIntoDocument(React.createElement('input', {type: 'text', tabindex: '1'}));
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('tabIndex');
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('tabIndex');
|
||||
});
|
||||
|
||||
it('should warn about incorrect casing on event handlers', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactTestUtils.renderIntoDocument(React.createElement('input', {type: 'text', onclick: '1'}));
|
||||
ReactTestUtils.renderIntoDocument(React.createElement('input', {type: 'text', onKeydown: '1'}));
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('onClick');
|
||||
expect(console.error.calls.argsFor(1)[0]).toContain('onKeyDown');
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('onClick');
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toContain('onKeyDown');
|
||||
});
|
||||
|
||||
it('should warn about class', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactDOMServer.renderToString(React.createElement('div', {class: 'muffins'}));
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('className');
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('className');
|
||||
});
|
||||
|
||||
it('should warn about props that are no longer supported', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactTestUtils.renderIntoDocument(<div />);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<div onFocusIn={() => {}} />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<div onFocusOut={() => {}} />);
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
});
|
||||
|
||||
it('gives source code refs for unknown prop warning', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactDOMServer.renderToString(<div class="paladin"/>);
|
||||
ReactDOMServer.renderToString(<input type="text" onclick="1"/>);
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
expect(
|
||||
normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])
|
||||
).toBe(
|
||||
@@ -1487,10 +1487,10 @@ describe('ReactDOMComponent', () => {
|
||||
var container = document.createElement('div');
|
||||
|
||||
ReactDOMServer.renderToString(<div className="paladin" />, container);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
ReactDOMServer.renderToString(<div class="paladin" />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(
|
||||
normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])
|
||||
).toBe(
|
||||
@@ -1512,13 +1512,13 @@ describe('ReactDOMComponent', () => {
|
||||
</div>
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('className');
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('className');
|
||||
var matches = console.error.calls.argsFor(0)[0].match(/.*\(.*:(\d+)\).*/);
|
||||
var previousLine = matches[1];
|
||||
|
||||
expect(console.error.calls.argsFor(1)[0]).toContain('onClick');
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toContain('onClick');
|
||||
matches = console.error.calls.argsFor(1)[0].match(/.*\(.*:(\d+)\).*/);
|
||||
var currentLine = matches[1];
|
||||
|
||||
@@ -1563,13 +1563,13 @@ describe('ReactDOMComponent', () => {
|
||||
|
||||
ReactDOMServer.renderToString(<Parent />, container);
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('className');
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('className');
|
||||
var matches = console.error.calls.argsFor(0)[0].match(/.*\(.*:(\d+)\).*/);
|
||||
var previousLine = matches[1];
|
||||
|
||||
expect(console.error.calls.argsFor(1)[0]).toContain('onClick');
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toContain('onClick');
|
||||
matches = console.error.calls.argsFor(1)[0].match(/.*\(.*:(\d+)\).*/);
|
||||
var currentLine = matches[1];
|
||||
|
||||
@@ -1584,13 +1584,13 @@ describe('ReactDOMComponent', () => {
|
||||
ReactTestUtils.renderIntoDocument(React.createElement('label', {for: 'test'}));
|
||||
ReactTestUtils.renderIntoDocument(React.createElement('input', {type: 'text', autofocus: true}));
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Unknown DOM property for. Did you mean htmlFor?\n in label'
|
||||
);
|
||||
|
||||
expect(console.error.calls.argsFor(1)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toBe(
|
||||
'Warning: Unknown DOM property autofocus. Did you mean autoFocus?\n in input'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -30,13 +30,13 @@ describe('ReactDOMInvalidARIAHook', () => {
|
||||
it('should allow valid aria-* props', () => {
|
||||
spyOn(console, 'error');
|
||||
mountComponent({'aria-label': 'Bumble bees'});
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
it('should warn for one invalid aria-* prop', () => {
|
||||
spyOn(console, 'error');
|
||||
mountComponent({'aria-badprop': 'maybe'});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Warning: Invalid aria prop `aria-badprop` on <div> tag. ' +
|
||||
'For details, see https://fb.me/invalid-aria-prop'
|
||||
);
|
||||
@@ -49,8 +49,8 @@ describe('ReactDOMInvalidARIAHook', () => {
|
||||
'aria-malprop': 'Turbulent seas',
|
||||
}
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Warning: Invalid aria props `aria-badprop`, `aria-malprop` on <div> ' +
|
||||
'tag. For details, see https://fb.me/invalid-aria-prop'
|
||||
);
|
||||
@@ -59,8 +59,8 @@ describe('ReactDOMInvalidARIAHook', () => {
|
||||
spyOn(console, 'error');
|
||||
// The valid attribute name is aria-haspopup.
|
||||
mountComponent({'aria-hasPopup': 'true'});
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Warning: Unknown ARIA attribute aria-hasPopup. ' +
|
||||
'Did you mean aria-haspopup?'
|
||||
);
|
||||
|
||||
@@ -87,9 +87,9 @@ describe('SyntheticEvent', () => {
|
||||
expect(syntheticEvent.nativeEvent).toBe(null);
|
||||
expect(syntheticEvent.target).toBe(null);
|
||||
// once for each property accessed
|
||||
expect(console.error.calls.count()).toBe(3);
|
||||
expectDev(console.error.calls.count()).toBe(3);
|
||||
// assert the first warning for accessing `type`
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: This synthetic event is reused for performance reasons. If ' +
|
||||
'you\'re seeing this, you\'re accessing the property `type` on a ' +
|
||||
'released/nullified synthetic event. This is set to null. If you must ' +
|
||||
@@ -104,8 +104,8 @@ describe('SyntheticEvent', () => {
|
||||
var syntheticEvent = createEvent({srcElement: target});
|
||||
syntheticEvent.destructor();
|
||||
expect(syntheticEvent.type = 'MouseEvent').toBe('MouseEvent');
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: This synthetic event is reused for performance reasons. If ' +
|
||||
'you\'re seeing this, you\'re setting the property `type` on a ' +
|
||||
'released/nullified synthetic event. This is effectively a no-op. If you must ' +
|
||||
@@ -119,8 +119,8 @@ describe('SyntheticEvent', () => {
|
||||
var syntheticEvent = createEvent({});
|
||||
SyntheticEvent.release(syntheticEvent);
|
||||
syntheticEvent.preventDefault();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: This synthetic event is reused for performance reasons. If ' +
|
||||
'you\'re seeing this, you\'re accessing the method `preventDefault` on a ' +
|
||||
'released/nullified synthetic event. This is a no-op function. If you must ' +
|
||||
@@ -134,8 +134,8 @@ describe('SyntheticEvent', () => {
|
||||
var syntheticEvent = createEvent({});
|
||||
SyntheticEvent.release(syntheticEvent);
|
||||
syntheticEvent.stopPropagation();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: This synthetic event is reused for performance reasons. If ' +
|
||||
'you\'re seeing this, you\'re accessing the method `stopPropagation` on a ' +
|
||||
'released/nullified synthetic event. This is a no-op function. If you must ' +
|
||||
@@ -156,13 +156,13 @@ describe('SyntheticEvent', () => {
|
||||
}
|
||||
var instance = ReactDOM.render(<div onClick={assignEvent} />, element);
|
||||
ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance));
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
// access a property to cause the warning
|
||||
event.nativeEvent; // eslint-disable-line no-unused-expressions
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: This synthetic event is reused for performance reasons. If ' +
|
||||
'you\'re seeing this, you\'re accessing the property `nativeEvent` on a ' +
|
||||
'released/nullified synthetic event. This is set to null. If you must ' +
|
||||
@@ -178,15 +178,15 @@ describe('SyntheticEvent', () => {
|
||||
SyntheticEvent.release(syntheticEvent);
|
||||
expect(syntheticEvent.foo).toBe('bar');
|
||||
if (typeof Proxy === 'function') {
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: This synthetic event is reused for performance reasons. If ' +
|
||||
'you\'re seeing this, you\'re adding a new property in the synthetic ' +
|
||||
'event object. The property is never released. ' +
|
||||
'See https://fb.me/react-event-pooling for more information.'
|
||||
);
|
||||
} else {
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -50,7 +50,7 @@ describe('ReactDOMInput', () => {
|
||||
document.body.appendChild(container);
|
||||
|
||||
var node = ReactDOM.findDOMNode(stub);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
// Simulate a native change event
|
||||
setUntrackedValue(node, 'giraffe');
|
||||
@@ -593,12 +593,12 @@ describe('ReactDOMInput', () => {
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<input type="text" value="zoink" readOnly={true} />
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<input type="text" value="zoink" readOnly={false} />
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
|
||||
@@ -617,12 +617,12 @@ describe('ReactDOMInput', () => {
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<input type="checkbox" checked="false" readOnly={true} />
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<input type="checkbox" checked="false" readOnly={false} />
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should update defaultValue to empty string', () => {
|
||||
@@ -634,21 +634,21 @@ describe('ReactDOMInput', () => {
|
||||
|
||||
it('should warn if value is null', () => {
|
||||
ReactTestUtils.renderIntoDocument(<input type="text" value={null} />);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'`value` prop on `input` should not be null. ' +
|
||||
'Consider using the empty string to clear the component or `undefined` ' +
|
||||
'for uncontrolled components.'
|
||||
);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<input type="text" value={null} />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should warn if checked and defaultChecked props are specified', () => {
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<input type="radio" checked={true} defaultChecked={true} readOnly={true} />
|
||||
);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component contains an input of type radio with both checked and defaultChecked props. ' +
|
||||
'Input elements must be either controlled or uncontrolled ' +
|
||||
'(specify either the checked prop, or the defaultChecked prop, but not ' +
|
||||
@@ -660,14 +660,14 @@ describe('ReactDOMInput', () => {
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<input type="radio" checked={true} defaultChecked={true} readOnly={true} />
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should warn if value and defaultValue props are specified', () => {
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<input type="text" value="foo" defaultValue="bar" readOnly={true} />
|
||||
);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component contains an input of type text with both value and defaultValue props. ' +
|
||||
'Input elements must be either controlled or uncontrolled ' +
|
||||
'(specify either the value prop, or the defaultValue prop, but not ' +
|
||||
@@ -679,7 +679,7 @@ describe('ReactDOMInput', () => {
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<input type="text" value="foo" defaultValue="bar" readOnly={true} />
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should warn if controlled input switches to uncontrolled (value is undefined)', () => {
|
||||
@@ -687,8 +687,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="text" />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type text to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -701,8 +701,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="text" value={null} />, container);
|
||||
expect(console.error.calls.count()).toBeGreaterThan(0);
|
||||
expect(console.error.calls.argsFor(1)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBeGreaterThan(0);
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toContain(
|
||||
'A component is changing a controlled input of type text to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -715,8 +715,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="text" defaultValue="uncontrolled" />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type text to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -729,8 +729,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="text" value="controlled" />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing an uncontrolled input of type text to be controlled. ' +
|
||||
'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -743,8 +743,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="text" value="controlled" />, container);
|
||||
expect(console.error.calls.count()).toBeGreaterThan(0);
|
||||
expect(console.error.calls.argsFor(1)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBeGreaterThan(0);
|
||||
expectDev(console.error.calls.argsFor(1)[0]).toContain(
|
||||
'A component is changing an uncontrolled input of type text to be controlled. ' +
|
||||
'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -757,8 +757,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="checkbox" />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type checkbox to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -771,8 +771,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="checkbox" checked={null} />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type checkbox to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -785,8 +785,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="checkbox" defaultChecked={true} />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type checkbox to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -799,8 +799,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="checkbox" checked={true} />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing an uncontrolled input of type checkbox to be controlled. ' +
|
||||
'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -813,8 +813,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="checkbox" checked={true} />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing an uncontrolled input of type checkbox to be controlled. ' +
|
||||
'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -827,8 +827,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="radio" />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type radio to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -841,8 +841,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="radio" checked={null} />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type radio to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -855,8 +855,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="radio" defaultChecked={true} />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type radio to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -869,8 +869,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="radio" checked={true} />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing an uncontrolled input of type radio to be controlled. ' +
|
||||
'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -883,8 +883,8 @@ describe('ReactDOMInput', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(stub, container);
|
||||
ReactDOM.render(<input type="radio" checked={true} />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing an uncontrolled input of type radio to be controlled. ' +
|
||||
'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
@@ -899,7 +899,7 @@ describe('ReactDOMInput', () => {
|
||||
ReactDOM.render(<input type="radio" value="value" defaultChecked={true} />, container);
|
||||
ReactDOM.render(<input type="radio" value="value" onChange={() => null} />, container);
|
||||
ReactDOM.render(<input type="radio" />, container);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should not warn if radio value changes but never becomes uncontrolled', () => {
|
||||
@@ -913,14 +913,14 @@ describe('ReactDOMInput', () => {
|
||||
checked={false}
|
||||
onChange={() => null}
|
||||
/>, container);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should warn if radio checked false changes to become uncontrolled', () => {
|
||||
var container = document.createElement('div');
|
||||
ReactDOM.render(<input type="radio" value="value" checked={false} onChange={() => null} />, container);
|
||||
ReactDOM.render(<input type="radio" value="value" />, container);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'A component is changing a controlled input of type radio to be uncontrolled. ' +
|
||||
'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
|
||||
'Decide between using a controlled or uncontrolled input ' +
|
||||
|
||||
@@ -39,8 +39,8 @@ describe('ReactDOMOption', () => {
|
||||
expect(node.innerHTML).toBe('1 2');
|
||||
ReactTestUtils.renderIntoDocument(<option>{1} <div /> {2}</option>);
|
||||
// only warn once
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('Only strings and numbers are supported as <option> children.');
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('Only strings and numbers are supported as <option> children.');
|
||||
});
|
||||
|
||||
it('should ignore null/undefined/false children without warning', () => {
|
||||
@@ -50,7 +50,7 @@ describe('ReactDOMOption', () => {
|
||||
|
||||
var node = ReactDOM.findDOMNode(stub);
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
expect(node.innerHTML).toBe('1 2');
|
||||
});
|
||||
|
||||
|
||||
@@ -430,14 +430,14 @@ describe('ReactDOMSelect', () => {
|
||||
spyOn(console, 'error');
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<select value={null}><option value="test"/></select>);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'`value` prop on `select` should not be null. ' +
|
||||
'Consider using the empty string to clear the component or `undefined` ' +
|
||||
'for uncontrolled components.'
|
||||
);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<select value={null}><option value="test"/></select>);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should refresh state on change', () => {
|
||||
@@ -464,7 +464,7 @@ describe('ReactDOMSelect', () => {
|
||||
<option value="gorilla">A gorilla!</option>
|
||||
</select>
|
||||
);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Select elements must be either controlled or uncontrolled ' +
|
||||
'(specify either the value prop, or the defaultValue prop, but not ' +
|
||||
'both). Decide between using a controlled or uncontrolled select ' +
|
||||
@@ -479,7 +479,7 @@ describe('ReactDOMSelect', () => {
|
||||
<option value="gorilla">A gorilla!</option>
|
||||
</select>
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should be able to safely remove select onChange', () => {
|
||||
|
||||
@@ -255,7 +255,7 @@ describe('ReactDOMTextarea', () => {
|
||||
var stub = <textarea>giraffe</textarea>;
|
||||
var node = renderTextarea(stub, container);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(node.value).toBe('giraffe');
|
||||
|
||||
// Changing children should do nothing, it functions like `defaultValue`.
|
||||
@@ -294,14 +294,14 @@ describe('ReactDOMTextarea', () => {
|
||||
it('should allow numbers as children', () => {
|
||||
spyOn(console, 'error');
|
||||
var node = renderTextarea(<textarea>{17}</textarea>);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(node.value).toBe('17');
|
||||
});
|
||||
|
||||
it('should allow booleans as children', () => {
|
||||
spyOn(console, 'error');
|
||||
var node = renderTextarea(<textarea>{false}</textarea>);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(node.value).toBe('false');
|
||||
});
|
||||
|
||||
@@ -313,7 +313,7 @@ describe('ReactDOMTextarea', () => {
|
||||
},
|
||||
};
|
||||
var node = renderTextarea(<textarea>{obj}</textarea>);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(node.value).toBe('sharkswithlasers');
|
||||
});
|
||||
|
||||
@@ -326,7 +326,7 @@ describe('ReactDOMTextarea', () => {
|
||||
);
|
||||
}).toThrow();
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
var node;
|
||||
expect(function() {
|
||||
@@ -335,7 +335,7 @@ describe('ReactDOMTextarea', () => {
|
||||
|
||||
expect(node.value).toBe('[object Object]');
|
||||
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
});
|
||||
|
||||
it('should unmount', () => {
|
||||
@@ -348,14 +348,14 @@ describe('ReactDOMTextarea', () => {
|
||||
spyOn(console, 'error');
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<textarea value={null} />);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'`value` prop on `textarea` should not be null. ' +
|
||||
'Consider using the empty string to clear the component or `undefined` ' +
|
||||
'for uncontrolled components.'
|
||||
);
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<textarea value={null} />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('should warn if value and defaultValue are specified', () => {
|
||||
@@ -363,7 +363,7 @@ describe('ReactDOMTextarea', () => {
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<textarea value="foo" defaultValue="bar" readOnly={true} />
|
||||
);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Textarea elements must be either controlled or uncontrolled ' +
|
||||
'(specify either the value prop, or the defaultValue prop, but not ' +
|
||||
'both). Decide between using a controlled or uncontrolled textarea ' +
|
||||
@@ -374,7 +374,7 @@ describe('ReactDOMTextarea', () => {
|
||||
ReactTestUtils.renderIntoDocument(
|
||||
<textarea value="foo" defaultValue="bar" readOnly={true} />
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -115,7 +115,7 @@ describe('ReactDOM', () => {
|
||||
spyOn(console, 'error');
|
||||
var element = React.DOM.div();
|
||||
expect(element.type).toBe('div');
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('throws in render() if the mount callback is not a function', () => {
|
||||
|
||||
@@ -134,12 +134,12 @@ describe('ReactMount', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
ReactMount.render(<div />, container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
container.innerHTML = ' ' + ReactDOMServer.renderToString(<div />);
|
||||
|
||||
ReactMount.render(<div />, container);
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
});
|
||||
|
||||
it('should not warn if mounting into non-empty node', () => {
|
||||
@@ -148,7 +148,7 @@ describe('ReactMount', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
ReactMount.render(<div />, container);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should warn when mounting into document.body', () => {
|
||||
@@ -158,8 +158,8 @@ describe('ReactMount', () => {
|
||||
|
||||
ReactMount.render(<div />, iFrame.contentDocument.body);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Rendering components directly into document.body is discouraged'
|
||||
);
|
||||
});
|
||||
@@ -175,8 +175,8 @@ describe('ReactMount', () => {
|
||||
<div>This markup contains an nbsp entity: client text</div>,
|
||||
div
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
' (client) nbsp entity: client text</div>\n' +
|
||||
' (server) nbsp entity: server text</div>'
|
||||
);
|
||||
@@ -220,8 +220,8 @@ describe('ReactMount', () => {
|
||||
spyOn(console, 'error');
|
||||
var rootNode = container.firstChild;
|
||||
ReactDOM.render(<span />, rootNode);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: render(...): Replacing React-rendered children with a new ' +
|
||||
'root component. If you intended to update the children of this node, ' +
|
||||
'you should instead have the existing children update their state and ' +
|
||||
@@ -246,15 +246,15 @@ describe('ReactMount', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
ReactDOMOther.unmountComponentAtNode(container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: unmountComponentAtNode(): The node you\'re attempting to unmount ' +
|
||||
'was rendered by another copy of React.'
|
||||
);
|
||||
|
||||
// Don't throw a warning if the correct React copy unmounts the node
|
||||
ReactDOM.unmountComponentAtNode(container);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('passes the correct callback context', () => {
|
||||
|
||||
@@ -53,8 +53,8 @@ describe('ReactMount', () => {
|
||||
var rootDiv = mainContainerDiv.firstChild;
|
||||
spyOn(console, 'error');
|
||||
ReactDOM.unmountComponentAtNode(rootDiv);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: unmountComponentAtNode(): The node you\'re attempting to ' +
|
||||
'unmount was rendered by React and is not a top-level container. You ' +
|
||||
'may have accidentally passed in a React root node instead of its ' +
|
||||
@@ -77,8 +77,8 @@ describe('ReactMount', () => {
|
||||
var nonRootDiv = mainContainerDiv.firstChild.firstChild;
|
||||
spyOn(console, 'error');
|
||||
ReactDOM.unmountComponentAtNode(nonRootDiv);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: unmountComponentAtNode(): The node you\'re attempting to ' +
|
||||
'unmount was rendered by React and is not a top-level container. ' +
|
||||
'Instead, have the parent component update its state and rerender in ' +
|
||||
|
||||
@@ -265,7 +265,7 @@ describe('ReactServerRendering', () => {
|
||||
spyOn(console, 'error');
|
||||
instance = ReactDOM.render(<TestComponent name="y" />, element);
|
||||
expect(mountCount).toEqual(4);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(element.innerHTML.length > 0).toBe(true);
|
||||
expect(element.innerHTML).not.toEqual(lastMarkup);
|
||||
|
||||
@@ -476,8 +476,8 @@ describe('ReactServerRendering', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactServerRendering.renderToString(<Foo />);
|
||||
jest.runOnlyPendingTimers();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.mostRecent().args[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.mostRecent().args[0]).toBe(
|
||||
'Warning: setState(...): Can only update a mounting component.' +
|
||||
' This usually means you called setState() outside componentWillMount() on the server.' +
|
||||
' This is a no-op. Please check the code for the Foo component.'
|
||||
@@ -502,8 +502,8 @@ describe('ReactServerRendering', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactServerRendering.renderToString(<Bar />);
|
||||
jest.runOnlyPendingTimers();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.mostRecent().args[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.mostRecent().args[0]).toBe(
|
||||
'Warning: replaceState(...): Can only update a mounting component. ' +
|
||||
'This usually means you called replaceState() outside componentWillMount() on the server. ' +
|
||||
'This is a no-op. Please check the code for the Bar component.'
|
||||
@@ -529,8 +529,8 @@ describe('ReactServerRendering', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactServerRendering.renderToString(<Baz />);
|
||||
jest.runOnlyPendingTimers();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.mostRecent().args[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.mostRecent().args[0]).toBe(
|
||||
'Warning: forceUpdate(...): Can only update a mounting component. ' +
|
||||
'This usually means you called forceUpdate() outside componentWillMount() on the server. ' +
|
||||
'This is a no-op. Please check the code for the Baz component.'
|
||||
|
||||
@@ -63,14 +63,14 @@ describe('ReactDebugTool', () => {
|
||||
});
|
||||
|
||||
ReactDebugTool.onTestEvent();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Exception thrown by hook while handling ' +
|
||||
'onTestEvent: Error: Hi.'
|
||||
);
|
||||
|
||||
ReactDebugTool.onTestEvent();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('returns isProfiling state', () => {
|
||||
|
||||
@@ -389,28 +389,28 @@ describe('ReactPerf', () => {
|
||||
var measurements = measure(() => {});
|
||||
spyOn(console, 'error');
|
||||
ReactPerf.getMeasurementsSummaryMap(measurements);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'`ReactPerf.getMeasurementsSummaryMap(...)` is deprecated. Use ' +
|
||||
'`ReactPerf.getWasted(...)` instead.'
|
||||
);
|
||||
|
||||
ReactPerf.getMeasurementsSummaryMap(measurements);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('warns once when using printDOM', () => {
|
||||
var measurements = measure(() => {});
|
||||
spyOn(console, 'error');
|
||||
ReactPerf.printDOM(measurements);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'`ReactPerf.printDOM(...)` is deprecated. Use ' +
|
||||
'`ReactPerf.printOperations(...)` instead.'
|
||||
);
|
||||
|
||||
ReactPerf.printDOM(measurements);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
|
||||
it('returns isRunning state', () => {
|
||||
@@ -464,7 +464,7 @@ describe('ReactPerf', () => {
|
||||
expect(ReactPerf.stop()).toBe(undefined);
|
||||
expect(ReactPerf.isRunning()).toBe(false);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
|
||||
__DEV__ = true;
|
||||
});
|
||||
|
||||
@@ -1830,8 +1830,8 @@ describe('ReactComponentTreeHook', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
getAddendum(-17);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: ReactComponentTreeHook: Missing React element for ' +
|
||||
'debugID -17 when building stack'
|
||||
);
|
||||
|
||||
@@ -348,7 +348,7 @@ describe('ReactComponent', () => {
|
||||
);
|
||||
|
||||
// One warning for each element creation
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -234,8 +234,8 @@ describe('ReactComponentLifeCycle', () => {
|
||||
}
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<StatefulComponent />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: setState(...): Can only update a mounted or ' +
|
||||
'mounting component. This usually means you called setState() on an ' +
|
||||
'unmounted component. This is a no-op. Please check the code for the ' +
|
||||
@@ -263,8 +263,8 @@ describe('ReactComponentLifeCycle', () => {
|
||||
var instance = ReactTestUtils.renderIntoDocument(element);
|
||||
expect(instance.isMounted()).toBeTruthy();
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Component is accessing isMounted inside its render()'
|
||||
);
|
||||
});
|
||||
@@ -289,8 +289,8 @@ describe('ReactComponentLifeCycle', () => {
|
||||
var instance = ReactTestUtils.renderIntoDocument(element);
|
||||
expect(instance.isMounted()).toBeTruthy();
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Component is accessing isMounted inside its render()'
|
||||
);
|
||||
});
|
||||
@@ -330,8 +330,8 @@ describe('ReactComponentLifeCycle', () => {
|
||||
});
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Component />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Component is accessing findDOMNode inside its render()'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -184,11 +184,11 @@ describe('ReactCompositeComponent', () => {
|
||||
mountedInstance.methodAutoBound();
|
||||
}).not.toThrow();
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
var explicitlyBound = mountedInstance.methodToBeExplicitlyBound.bind(
|
||||
mountedInstance
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(2);
|
||||
expectDev(console.error.calls.count()).toBe(2);
|
||||
var autoBound = mountedInstance.methodAutoBound;
|
||||
|
||||
var context = {};
|
||||
@@ -269,13 +269,13 @@ describe('ReactCompositeComponent', () => {
|
||||
instance = ReactDOM.render(instance, container);
|
||||
instance.forceUpdate();
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
ReactDOM.unmountComponentAtNode(container);
|
||||
|
||||
instance.forceUpdate();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: forceUpdate(...): Can only update a mounted or ' +
|
||||
'mounting component. This usually means you called forceUpdate() on an ' +
|
||||
'unmounted component. This is a no-op. Please check the code for the ' +
|
||||
@@ -309,7 +309,7 @@ describe('ReactCompositeComponent', () => {
|
||||
|
||||
instance.setState({value: 1});
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
expect(renders).toBe(2);
|
||||
|
||||
@@ -318,8 +318,8 @@ describe('ReactCompositeComponent', () => {
|
||||
|
||||
expect(renders).toBe(2);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: setState(...): Can only update a mounted or ' +
|
||||
'mounting component. This usually means you called setState() on an ' +
|
||||
'unmounted component. This is a no-op. Please check the code for the ' +
|
||||
@@ -377,12 +377,12 @@ describe('ReactCompositeComponent', () => {
|
||||
}
|
||||
}
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
var instance = ReactDOM.render(<Component />, container);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: setState(...): Cannot update during an existing state ' +
|
||||
'transition (such as within `render` or another component\'s ' +
|
||||
'constructor). Render methods should be a pure function of props and ' +
|
||||
@@ -426,12 +426,12 @@ describe('ReactCompositeComponent', () => {
|
||||
}
|
||||
}
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
var instance = ReactDOM.render(<Component />, container);
|
||||
expect(renderPasses).toBe(2);
|
||||
expect(instance.state.value).toBe(1);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: setState(...): Cannot call setState() inside getChildContext()'
|
||||
);
|
||||
});
|
||||
@@ -502,8 +502,8 @@ describe('ReactCompositeComponent', () => {
|
||||
var instance = ReactTestUtils.renderIntoDocument(<Component />);
|
||||
instance.setState({bogus: true});
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Component.shouldComponentUpdate(): Returned undefined instead of a ' +
|
||||
'boolean value. Make sure to return true or false.'
|
||||
);
|
||||
@@ -523,8 +523,8 @@ describe('ReactCompositeComponent', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Component />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Component has a method called ' +
|
||||
'componentDidUnmount(). But there is no such lifecycle method. ' +
|
||||
'Did you mean componentWillUnmount()?'
|
||||
@@ -1022,8 +1022,8 @@ describe('ReactCompositeComponent', () => {
|
||||
}
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Outer />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: _renderNewRootComponent(): Render methods should ' +
|
||||
'be a pure function of props and state; triggering nested component ' +
|
||||
'updates from render is not allowed. If necessary, trigger nested ' +
|
||||
@@ -1267,12 +1267,12 @@ describe('ReactCompositeComponent', () => {
|
||||
}
|
||||
}
|
||||
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
|
||||
ReactDOM.render(<Foo idx="qwe" />, container);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Foo(...): When calling super() in `Foo`, make sure to pass ' +
|
||||
'up the same props that your component\'s constructor was passed.'
|
||||
);
|
||||
|
||||
@@ -32,7 +32,7 @@ describe('ReactMockedComponent', () => {
|
||||
it('should allow an implicitly mocked component to be rendered without warnings', () => {
|
||||
spyOn(console, 'error');
|
||||
ReactTestUtils.renderIntoDocument(<AutoMockedComponent />);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('should allow an implicitly mocked component to be updated', () => {
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
describe('ReactMultiChild', () => {
|
||||
function normalizeCodeLocInfo(str) {
|
||||
return str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
|
||||
}
|
||||
|
||||
var React;
|
||||
@@ -185,8 +185,8 @@ describe('ReactMultiChild', () => {
|
||||
container
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
|
||||
'Warning: flattenChildren(...): ' +
|
||||
'Encountered two children with the same key, `1`. ' +
|
||||
'Child keys must be unique; when two children share a key, ' +
|
||||
|
||||
@@ -183,8 +183,8 @@ describe('ReactMultiChildText', () => {
|
||||
[true, <div>{1.2}{''}{<div />}{'foo'}</div>, true, 1.2], [<div />, '1.2'],
|
||||
['', 'foo', <div>{true}{<div />}{1.2}{''}</div>, 'foo'], ['', 'foo', <div />, 'foo'],
|
||||
]);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Warning: Each child in an array or iterator should have a unique "key" prop.'
|
||||
);
|
||||
});
|
||||
@@ -244,6 +244,6 @@ describe('ReactMultiChildText', () => {
|
||||
expect(childNodes[5]).toBe(alpha3);
|
||||
|
||||
// Using Maps as children gives a single warning
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -112,8 +112,8 @@ describe('ReactStatelessComponent', () => {
|
||||
|
||||
ReactDOM.render(<StatelessComponentWithChildContext name="A" />, container);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'StatelessComponentWithChildContext(...): childContextTypes cannot ' +
|
||||
'be defined on a functional component.'
|
||||
);
|
||||
@@ -127,8 +127,8 @@ describe('ReactStatelessComponent', () => {
|
||||
expect(function() {
|
||||
ReactTestUtils.renderIntoDocument(<div><NotAComponent /></div>);
|
||||
}).toThrow();
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'NotAComponent(...): A valid React element (or null) must be returned. ' +
|
||||
'You may have returned undefined, an array or some other invalid object.'
|
||||
);
|
||||
@@ -159,8 +159,8 @@ describe('ReactStatelessComponent', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Parent/>);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Stateless function components cannot be given refs ' +
|
||||
'(See ref "stateless" in StatelessComponent created by Parent). ' +
|
||||
'Attempts to access this ref will fail.'
|
||||
@@ -183,9 +183,9 @@ describe('ReactStatelessComponent', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
ReactTestUtils.renderIntoDocument(<Child />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('a unique "key" prop');
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain('Child');
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('a unique "key" prop');
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain('Child');
|
||||
});
|
||||
|
||||
it('should support default props and prop types', () => {
|
||||
@@ -197,7 +197,7 @@ describe('ReactStatelessComponent', () => {
|
||||
|
||||
spyOn(console, 'error');
|
||||
ReactTestUtils.renderIntoDocument(<Child />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(
|
||||
console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
|
||||
).toBe(
|
||||
@@ -265,8 +265,8 @@ describe('ReactStatelessComponent', () => {
|
||||
expect(function() {
|
||||
ReactTestUtils.renderIntoDocument(<div><NotAComponent /></div>);
|
||||
}).toThrow(); // has no method 'render'
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'NotAComponent(...): A valid React element (or null) must be returned. You may ' +
|
||||
'have returned undefined, an array or some other invalid object.'
|
||||
);
|
||||
|
||||
@@ -897,6 +897,7 @@ describe('ReactUpdates', () => {
|
||||
|
||||
var component = ReactTestUtils.renderIntoDocument(<A />);
|
||||
|
||||
console.log('xxx', expect().toThrowError);
|
||||
expect(() => component.setState({}, 'no')).toThrowError(
|
||||
'setState(...): Expected the last optional `callback` argument ' +
|
||||
'to be a function. Instead received: string.'
|
||||
|
||||
@@ -223,8 +223,8 @@ describe('ReactTestRenderer', () => {
|
||||
}
|
||||
ReactTestRenderer.create(<Baz />);
|
||||
ReactTestRenderer.create(<Foo />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Stateless function components cannot be given refs ' +
|
||||
'(See ref "foo" in Bar created by Foo). ' +
|
||||
'Attempts to access this ref will fail.'
|
||||
|
||||
@@ -84,8 +84,8 @@ describe('traverseAllChildren', () => {
|
||||
'.0'
|
||||
);
|
||||
expect(traverseContext.length).toEqual(1);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Warning: Each child in an array or iterator should have a unique "key" prop.'
|
||||
);
|
||||
});
|
||||
@@ -330,8 +330,8 @@ describe('traverseAllChildren', () => {
|
||||
'.2'
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Warning: Each child in an array or iterator should have a unique "key" prop.'
|
||||
);
|
||||
});
|
||||
@@ -434,8 +434,8 @@ describe('traverseAllChildren', () => {
|
||||
'.$#3:0'
|
||||
);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toContain(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toContain(
|
||||
'Warning: Using Maps as children is not yet fully supported. It is an ' +
|
||||
'experimental feature that might be removed. Convert it to a sequence ' +
|
||||
'/ iterable of keyed ReactElements instead.'
|
||||
@@ -552,8 +552,8 @@ describe('traverseAllChildren', () => {
|
||||
|
||||
ReactTestUtils.renderIntoDocument(<Parent />);
|
||||
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expect(console.error.calls.argsFor(0)[0]).toBe(
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.argsFor(0)[0]).toBe(
|
||||
'Warning: Using Maps as children is not yet fully supported. It is an ' +
|
||||
'experimental feature that might be removed. Convert it to a sequence ' +
|
||||
'/ iterable of keyed ReactElements instead. Check the render method of `Parent`.'
|
||||
|
||||
@@ -292,7 +292,7 @@ describe('ReactTestUtils', () => {
|
||||
|
||||
var shallowRenderer = ReactTestUtils.createRenderer();
|
||||
shallowRenderer.render(<SimpleComponent />);
|
||||
expect(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expect(
|
||||
console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
|
||||
).toBe(
|
||||
@@ -546,7 +546,7 @@ describe('ReactTestUtils', () => {
|
||||
ReactDOM.findDOMNode(instance),
|
||||
{clientX: CLIENT_X}
|
||||
);
|
||||
expect(console.error.calls.count()).toBe(0);
|
||||
expectDev(console.error.calls.count()).toBe(0);
|
||||
});
|
||||
|
||||
it('can scry with stateless components involved', () => {
|
||||
|
||||
Reference in New Issue
Block a user