@samitouri / QOS-React / commits / 4aa9cfb6ba

Change warnings to use expectDev

Ben Alpert committed Nov 13, 2016 at 14:16 UTC 4aa9cfb6ba33efb7bb823721df948f78444df673
42 files changed +448 -447
src/addons/__tests__/ReactFragment-test.js
+8 -8
@@ -75,8 +75,8 @@ describe('ReactFragment', () => {
75
76 ReactFragment.create({1: <span />, 2: <span />});
77
78 - expect(console.error.calls.count()).toBe(1);
79 - expect(console.error.calls.argsFor(0)[0]).toContain(
78 + expectDev(console.error.calls.count()).toBe(1);
79 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
80 'Child objects should have non-numeric keys so ordering is preserved.'
81 );
82 });
@@ -84,8 +84,8 @@ describe('ReactFragment', () => {
84 it('should warn if passing null to createFragment', () => {
85 spyOn(console, 'error');
86 ReactFragment.create(null);
87 - expect(console.error.calls.count()).toBe(1);
88 - expect(console.error.calls.argsFor(0)[0]).toContain(
87 + expectDev(console.error.calls.count()).toBe(1);
88 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
89 'React.addons.createFragment only accepts a single object.'
90 );
91 });
@@ -93,8 +93,8 @@ describe('ReactFragment', () => {
93 it('should warn if passing an array to createFragment', () => {
94 spyOn(console, 'error');
95 ReactFragment.create([]);
96 - expect(console.error.calls.count()).toBe(1);
97 - expect(console.error.calls.argsFor(0)[0]).toContain(
96 + expectDev(console.error.calls.count()).toBe(1);
97 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
98 'React.addons.createFragment only accepts a single object.'
99 );
100 });
@@ -102,8 +102,8 @@ describe('ReactFragment', () => {
102 it('should warn if passing a ReactElement to createFragment', () => {
103 spyOn(console, 'error');
104 ReactFragment.create(<div />);
105 - expect(console.error.calls.count()).toBe(1);
106 - expect(console.error.calls.argsFor(0)[0]).toContain(
105 + expectDev(console.error.calls.count()).toBe(1);
106 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
107 'React.addons.createFragment does not accept a ReactElement without a ' +
108 'wrapper object.'
109 );
src/addons/transitions/__tests__/ReactCSSTransitionGroup-test.js
+3 -3
@@ -45,7 +45,7 @@ describe('ReactCSSTransitionGroup', () => {
45 );
46
47 // Warning about the missing transitionLeaveTimeout prop
48 - expect(console.error.calls.count()).toBe(1);
48 + expectDev(console.error.calls.count()).toBe(1);
49 });
50
51 it('should not warn if timeouts is zero', () => {
@@ -61,7 +61,7 @@ describe('ReactCSSTransitionGroup', () => {
61 container
62 );
63
64 - expect(console.error.calls.count()).toBe(0);
64 + expectDev(console.error.calls.count()).toBe(0);
65 });
66
67 it('should clean-up silently after the timeout elapses', () => {
@@ -103,7 +103,7 @@ describe('ReactCSSTransitionGroup', () => {
103 }
104
105 // No warnings
106 - expect(console.error.calls.count()).toBe(0);
106 + expectDev(console.error.calls.count()).toBe(0);
107
108 // The leaving child has been removed
109 expect(ReactDOM.findDOMNode(a).childNodes.length).toBe(1);
src/addons/transitions/__tests__/ReactTransitionGroup-test.js
+4 -4
@@ -21,7 +21,7 @@ describe('ReactTransitionGroup', () => {
21 var container;
22
23 function normalizeCodeLocInfo(str) {
24 - return str.replace(/\(at .+?:\d+\)/g, '(at **)');
24 + return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
25 }
26
27 beforeEach(() => {
@@ -308,14 +308,14 @@ describe('ReactTransitionGroup', () => {
308
309 ReactDOM.render(<Component />, container);
310
311 - expect(console.error.calls.count()).toBe(2);
312 - expect(console.error.calls.argsFor(0)[0]).toBe(
311 + expectDev(console.error.calls.count()).toBe(2);
312 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
313 'Warning: flattenChildren(...): ' +
314 'Encountered two children with the same key, `1`. ' +
315 'Child keys must be unique; when two children share a key, ' +
316 'only the first child will be used.'
317 );
318 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
318 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
319 'Warning: flattenChildren(...): ' +
320 'Encountered two children with the same key, `1`. ' +
321 'Child keys must be unique; when two children share a key, ' +
src/isomorphic/classic/__tests__/ReactContextValidator-test.js
+11 -11
@@ -23,7 +23,7 @@ var ReactTestUtils;
23
24 describe('ReactContextValidator', () => {
25 function normalizeCodeLocInfo(str) {
26 - return str.replace(/\(at .+?:\d+\)/g, '(at **)');
26 + return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
27 }
28
29 beforeEach(() => {
@@ -146,8 +146,8 @@ describe('ReactContextValidator', () => {
146
147 ReactTestUtils.renderIntoDocument(<Component />);
148
149 - expect(console.error.calls.count()).toBe(1);
150 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
149 + expectDev(console.error.calls.count()).toBe(1);
150 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
151 'Warning: Failed context type: ' +
152 'The context `foo` is marked as required in `Component`, but its value ' +
153 'is `undefined`.\n' +
@@ -175,7 +175,7 @@ describe('ReactContextValidator', () => {
175 );
176
177 // Previous call should not error
178 - expect(console.error.calls.count()).toBe(1);
178 + expectDev(console.error.calls.count()).toBe(1);
179
180 var ComponentInFooNumberContext = React.createClass({
181 childContextTypes: {
@@ -195,8 +195,8 @@ describe('ReactContextValidator', () => {
195
196 ReactTestUtils.renderIntoDocument(<ComponentInFooNumberContext fooValue={123} />);
197
198 - expect(console.error.calls.count()).toBe(2);
199 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
198 + expectDev(console.error.calls.count()).toBe(2);
199 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
200 'Warning: Failed context type: ' +
201 'Invalid context `foo` of type `number` supplied ' +
202 'to `Component`, expected `string`.\n' +
@@ -224,8 +224,8 @@ describe('ReactContextValidator', () => {
224 });
225
226 ReactTestUtils.renderIntoDocument(<Component testContext={{bar: 123}} />);
227 - expect(console.error.calls.count()).toBe(1);
228 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
227 + expectDev(console.error.calls.count()).toBe(1);
228 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
229 'Warning: Failed childContext type: ' +
230 'The child context `foo` is marked as required in `Component`, but its ' +
231 'value is `undefined`.\n' +
@@ -234,8 +234,8 @@ describe('ReactContextValidator', () => {
234
235 ReactTestUtils.renderIntoDocument(<Component testContext={{foo: 123}} />);
236
237 - expect(console.error.calls.count()).toBe(2);
238 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
237 + expectDev(console.error.calls.count()).toBe(2);
238 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(1)[0])).toBe(
239 'Warning: Failed childContext type: ' +
240 'Invalid child context `foo` of type `number` ' +
241 'supplied to `Component`, expected `string`.\n' +
@@ -251,7 +251,7 @@ describe('ReactContextValidator', () => {
251 );
252
253 // Previous calls should not log errors
254 - expect(console.error.calls.count()).toBe(2);
254 + expectDev(console.error.calls.count()).toBe(2);
255 });
256
257 });
src/isomorphic/classic/class/__tests__/ReactBind-test.js
+3 -3
@@ -123,8 +123,8 @@ describe('autobinding', () => {
123
124 ReactTestUtils.renderIntoDocument(<TestBindComponent />);
125
126 - expect(console.error.calls.count()).toBe(1);
127 - expect(console.error.calls.argsFor(0)[0]).toBe(
126 + expectDev(console.error.calls.count()).toBe(1);
127 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
128 'Warning: bind(): You are binding a component method to the component. ' +
129 'React does this for you automatically in a high-performance ' +
130 'way, so you can safely remove this call. See TestBindComponent'
@@ -151,7 +151,7 @@ describe('autobinding', () => {
151
152 ReactTestUtils.renderIntoDocument(<TestBindComponent />);
153
154 - expect(console.error.calls.count()).toBe(0);
154 + expectDev(console.error.calls.count()).toBe(0);
155 });
156
157 });
src/isomorphic/classic/class/__tests__/ReactBindOptout-test.js
+2 -2
@@ -186,7 +186,7 @@ describe('autobind optout', () => {
186
187 ReactTestUtils.renderIntoDocument(<TestBindComponent />);
188
189 - expect(console.error.calls.count()).toBe(0);
189 + expectDev(console.error.calls.count()).toBe(0);
190 });
191
192 it('does not warn if you pass an manually bound method to setState', () => {
@@ -210,7 +210,7 @@ describe('autobind optout', () => {
210
211 ReactTestUtils.renderIntoDocument(<TestBindComponent />);
212
213 - expect(console.error.calls.count()).toBe(0);
213 + expectDev(console.error.calls.count()).toBe(0);
214 });
215
216 });
src/isomorphic/classic/class/__tests__/ReactClass-test.js
+19 -19
@@ -69,8 +69,8 @@ describe('ReactClass-spec', () => {
69 return <span>{this.props.prop}</span>;
70 },
71 });
72 - expect(console.error.calls.count()).toBe(1);
73 - expect(console.error.calls.argsFor(0)[0]).toBe(
72 + expectDev(console.error.calls.count()).toBe(1);
73 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
74 'Warning: Component: prop type `prop` is invalid; ' +
75 'it must be a function, usually from React.PropTypes.'
76 );
@@ -87,8 +87,8 @@ describe('ReactClass-spec', () => {
87 return <span>{this.props.prop}</span>;
88 },
89 });
90 - expect(console.error.calls.count()).toBe(1);
91 - expect(console.error.calls.argsFor(0)[0]).toBe(
90 + expectDev(console.error.calls.count()).toBe(1);
91 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
92 'Warning: Component: context type `prop` is invalid; ' +
93 'it must be a function, usually from React.PropTypes.'
94 );
@@ -105,8 +105,8 @@ describe('ReactClass-spec', () => {
105 return <span>{this.props.prop}</span>;
106 },
107 });
108 - expect(console.error.calls.count()).toBe(1);
109 - expect(console.error.calls.argsFor(0)[0]).toBe(
108 + expectDev(console.error.calls.count()).toBe(1);
109 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
110 'Warning: Component: child context type `prop` is invalid; ' +
111 'it must be a function, usually from React.PropTypes.'
112 );
@@ -123,8 +123,8 @@ describe('ReactClass-spec', () => {
123 return <div />;
124 },
125 });
126 - expect(console.error.calls.count()).toBe(1);
127 - expect(console.error.calls.argsFor(0)[0]).toBe(
126 + expectDev(console.error.calls.count()).toBe(1);
127 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
128 'Warning: A component has a method called componentShouldUpdate(). Did you ' +
129 'mean shouldComponentUpdate()? The name is phrased as a question ' +
130 'because the function is expected to return a value.'
@@ -139,8 +139,8 @@ describe('ReactClass-spec', () => {
139 return <div />;
140 },
141 });
142 - expect(console.error.calls.count()).toBe(2);
143 - expect(console.error.calls.argsFor(1)[0]).toBe(
142 + expectDev(console.error.calls.count()).toBe(2);
143 + expectDev(console.error.calls.argsFor(1)[0]).toBe(
144 'Warning: NamedComponent has a method called componentShouldUpdate(). Did you ' +
145 'mean shouldComponentUpdate()? The name is phrased as a question ' +
146 'because the function is expected to return a value.'
@@ -157,8 +157,8 @@ describe('ReactClass-spec', () => {
157 return <div />;
158 },
159 });
160 - expect(console.error.calls.count()).toBe(1);
161 - expect(console.error.calls.argsFor(0)[0]).toBe(
160 + expectDev(console.error.calls.count()).toBe(1);
161 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
162 'Warning: A component has a method called componentWillRecieveProps(). Did you ' +
163 'mean componentWillReceiveProps()?'
164 );
@@ -206,20 +206,20 @@ describe('ReactClass-spec', () => {
206 return <div />;
207 },
208 });
209 - expect(console.error.calls.count()).toBe(4);
210 - expect(console.error.calls.argsFor(0)[0]).toBe(
209 + expectDev(console.error.calls.count()).toBe(4);
210 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
211 'createClass(...): `mixins` is now a static property and should ' +
212 'be defined inside "statics".'
213 );
214 - expect(console.error.calls.argsFor(1)[0]).toBe(
214 + expectDev(console.error.calls.argsFor(1)[0]).toBe(
215 'createClass(...): `propTypes` is now a static property and should ' +
216 'be defined inside "statics".'
217 );
218 - expect(console.error.calls.argsFor(2)[0]).toBe(
218 + expectDev(console.error.calls.argsFor(2)[0]).toBe(
219 'createClass(...): `contextTypes` is now a static property and ' +
220 'should be defined inside "statics".'
221 );
222 - expect(console.error.calls.argsFor(3)[0]).toBe(
222 + expectDev(console.error.calls.argsFor(3)[0]).toBe(
223 'createClass(...): `childContextTypes` is now a static property and ' +
224 'should be defined inside "statics".'
225 );
@@ -343,8 +343,8 @@ describe('ReactClass-spec', () => {
343 });
344
345 expect(() => Component()).toThrow();
346 - expect(console.error.calls.count()).toBe(1);
347 - expect(console.error.calls.argsFor(0)[0]).toBe(
346 + expectDev(console.error.calls.count()).toBe(1);
347 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
348 'Warning: Something is calling a React component directly. Use a ' +
349 'factory or JSX instead. See: https://fb.me/react-legacyfactory'
350 );
src/isomorphic/classic/class/__tests__/ReactClassMixin-test.js
+8 -8
@@ -321,8 +321,8 @@ describe('ReactClass-mixin', () => {
321 },
322 });
323
324 - expect(console.error.calls.count()).toBe(1);
325 - expect(console.error.calls.argsFor(0)[0]).toBe(
324 + expectDev(console.error.calls.count()).toBe(1);
325 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
326 'Warning: ReactClass: You\'re attempting to include a mixin that is ' +
327 'either null or not an object. Check the mixins included by the ' +
328 'component, as well as any mixins they include themselves. ' +
@@ -341,8 +341,8 @@ describe('ReactClass-mixin', () => {
341 },
342 });
343
344 - expect(console.error.calls.count()).toBe(1);
345 - expect(console.error.calls.argsFor(0)[0]).toBe(
344 + expectDev(console.error.calls.count()).toBe(1);
345 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
346 'Warning: ReactClass: You\'re attempting to include a mixin that is ' +
347 'either null or not an object. Check the mixins included by the ' +
348 'component, as well as any mixins they include themselves. ' +
@@ -365,8 +365,8 @@ describe('ReactClass-mixin', () => {
365 },
366 });
367
368 - expect(console.error.calls.count()).toBe(1);
369 - expect(console.error.calls.argsFor(0)[0]).toBe(
368 + expectDev(console.error.calls.count()).toBe(1);
369 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
370 'Warning: ReactClass: You\'re attempting to include a mixin that is ' +
371 'either null or not an object. Check the mixins included by the ' +
372 'component, as well as any mixins they include themselves. ' +
@@ -389,8 +389,8 @@ describe('ReactClass-mixin', () => {
389 },
390 });
391
392 - expect(console.error.calls.count()).toBe(1);
393 - expect(console.error.calls.argsFor(0)[0]).toBe(
392 + expectDev(console.error.calls.count()).toBe(1);
393 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
394 'Warning: ReactClass: You\'re attempting to include a mixin that is ' +
395 'either null or not an object. Check the mixins included by the ' +
396 'component, as well as any mixins they include themselves. ' +
src/isomorphic/classic/element/__tests__/ReactElement-test.js
+18 -18
@@ -76,10 +76,10 @@ describe('ReactElement', () => {
76 );
77 },
78 });
79 - expect(console.error.calls.count()).toBe(0);
79 + expectDev(console.error.calls.count()).toBe(0);
80 ReactDOM.render(<Parent />, container);
81 - expect(console.error.calls.count()).toBe(1);
82 - expect(console.error.calls.argsFor(0)[0]).toContain(
81 + expectDev(console.error.calls.count()).toBe(1);
82 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
83 'Child: `key` is not a prop. Trying to access it will result ' +
84 'in `undefined` being returned. If you need to access the same ' +
85 'value within the child component, you should pass it as a different ' +
@@ -106,10 +106,10 @@ describe('ReactElement', () => {
106 );
107 },
108 });
109 - expect(console.error.calls.count()).toBe(0);
109 + expectDev(console.error.calls.count()).toBe(0);
110 ReactDOM.render(<Parent />, container);
111 - expect(console.error.calls.count()).toBe(1);
112 - expect(console.error.calls.argsFor(0)[0]).toContain(
111 + expectDev(console.error.calls.count()).toBe(1);
112 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
113 'Child: `key` is not a prop. Trying to access it will result ' +
114 'in `undefined` being returned. If you need to access the same ' +
115 'value within the child component, you should pass it as a different ' +
@@ -120,10 +120,10 @@ describe('ReactElement', () => {
120 it('should warn when `key` is being accessed on a host element', () => {
121 spyOn(console, 'error');
122 var element = <div key="3" />;
123 - expect(console.error.calls.count()).toBe(0);
123 + expectDev(console.error.calls.count()).toBe(0);
124 void element.props.key;
125 - expect(console.error.calls.count()).toBe(1);
126 - expect(console.error.calls.argsFor(0)[0]).toContain(
125 + expectDev(console.error.calls.count()).toBe(1);
126 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
127 'div: `key` is not a prop. Trying to access it will result ' +
128 'in `undefined` being returned. If you need to access the same ' +
129 'value within the child component, you should pass it as a different ' +
@@ -148,10 +148,10 @@ describe('ReactElement', () => {
148 );
149 },
150 });
151 - expect(console.error.calls.count()).toBe(0);
151 + expectDev(console.error.calls.count()).toBe(0);
152 ReactDOM.render(<Parent />, container);
153 - expect(console.error.calls.count()).toBe(1);
154 - expect(console.error.calls.argsFor(0)[0]).toContain(
153 + expectDev(console.error.calls.count()).toBe(1);
154 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
155 'Child: `ref` is not a prop. Trying to access it will result ' +
156 'in `undefined` being returned. If you need to access the same ' +
157 'value within the child component, you should pass it as a different ' +
@@ -280,7 +280,7 @@ describe('ReactElement', () => {
280 children: 'text',
281 }, a);
282 expect(element.props.children).toBe(a);
283 - expect(console.error.calls.count()).toBe(0);
283 + expectDev(console.error.calls.count()).toBe(0);
284 });
285
286 it('does not override children if no rest args are provided', () => {
@@ -289,7 +289,7 @@ describe('ReactElement', () => {
289 children: 'text',
290 });
291 expect(element.props.children).toBe('text');
292 - expect(console.error.calls.count()).toBe(0);
292 + expectDev(console.error.calls.count()).toBe(0);
293 });
294
295 it('overrides children if null is provided as an argument', () => {
@@ -298,7 +298,7 @@ describe('ReactElement', () => {
298 children: 'text',
299 }, null);
300 expect(element.props.children).toBe(null);
301 - expect(console.error.calls.count()).toBe(0);
301 + expectDev(console.error.calls.count()).toBe(0);
302 });
303
304 it('merges rest arguments onto the children prop in an array', () => {
@@ -308,7 +308,7 @@ describe('ReactElement', () => {
308 var c = 3;
309 var element = React.createFactory(ComponentClass)(null, a, b, c);
310 expect(element.props.children).toEqual([1, 2, 3]);
311 - expect(console.error.calls.count()).toBe(0);
311 + expectDev(console.error.calls.count()).toBe(0);
312 });
313
314 // NOTE: We're explicitly not using JSX here. This is intended to test
@@ -332,7 +332,7 @@ describe('ReactElement', () => {
332
333 var element = React.createElement(StaticMethodComponentClass);
334 expect(element.type.someStaticMethod()).toBe('someReturnValue');
335 - expect(console.error.calls.count()).toBe(0);
335 + expectDev(console.error.calls.count()).toBe(0);
336 });
337
338 // NOTE: We're explicitly not using JSX here. This is intended to test
@@ -477,7 +477,7 @@ describe('ReactElement', () => {
477 });
478 var test = ReactTestUtils.renderIntoDocument(<Test value={+undefined} />);
479 expect(test.props.value).toBeNaN();
480 - expect(console.error.calls.count()).toBe(0);
480 + expectDev(console.error.calls.count()).toBe(0);
481 });
482
483 // NOTE: We're explicitly not using JSX here. This is intended to test
src/isomorphic/classic/element/__tests__/ReactElementClone-test.js
+7 -7
@@ -250,8 +250,8 @@ describe('ReactElementClone', () => {
250
251 React.cloneElement(<div />, null, [<div />, <div />]);
252
253 - expect(console.error.calls.count()).toBe(1);
254 - expect(console.error.calls.argsFor(0)[0]).toContain(
253 + expectDev(console.error.calls.count()).toBe(1);
254 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
255 'Each child in an array or iterator should have a unique "key" prop.'
256 );
257 });
@@ -261,7 +261,7 @@ describe('ReactElementClone', () => {
261
262 React.cloneElement(<div />, null, [<div key="#1" />, <div key="#2" />]);
263
264 - expect(console.error.calls.count()).toBe(0);
264 + expectDev(console.error.calls.count()).toBe(0);
265 });
266
267 it('does not warn when the element is directly in rest args', () => {
@@ -269,7 +269,7 @@ describe('ReactElementClone', () => {
269
270 React.cloneElement(<div />, null, <div />, <div />);
271
272 - expect(console.error.calls.count()).toBe(0);
272 + expectDev(console.error.calls.count()).toBe(0);
273 });
274
275 it('does not warn when the array contains a non-element', () => {
@@ -277,7 +277,7 @@ describe('ReactElementClone', () => {
277
278 React.cloneElement(<div />, null, [{}, {}]);
279
280 - expect(console.error.calls.count()).toBe(0);
280 + expectDev(console.error.calls.count()).toBe(0);
281 });
282
283 it('should check declared prop types after clone', () => {
@@ -304,8 +304,8 @@ describe('ReactElementClone', () => {
304 },
305 });
306 ReactTestUtils.renderIntoDocument(React.createElement(GrandParent));
307 - expect(console.error.calls.count()).toBe(1);
308 - expect(console.error.calls.argsFor(0)[0]).toBe(
307 + expectDev(console.error.calls.count()).toBe(1);
308 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
309 'Warning: Failed prop type: ' +
310 'Invalid prop `color` of type `number` supplied to `Component`, ' +
311 'expected `string`.\n' +
src/isomorphic/classic/element/__tests__/ReactElementValidator-test.js
+43 -43
@@ -20,7 +20,7 @@ var ReactTestUtils;
20
21 describe('ReactElementValidator', () => {
22 function normalizeCodeLocInfo(str) {
23 - return str.replace(/\(at .+?:\d+\)/g, '(at **)');
23 + return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
24 }
25
26 var ComponentClass;
@@ -44,8 +44,8 @@ describe('ReactElementValidator', () => {
44
45 Component(null, [Component(), Component()]);
46
47 - expect(console.error.calls.count()).toBe(1);
48 - expect(console.error.calls.argsFor(0)[0]).toContain(
47 + expectDev(console.error.calls.count()).toBe(1);
48 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
49 'Each child in an array or iterator should have a unique "key" prop.'
50 );
51 });
@@ -74,8 +74,8 @@ describe('ReactElementValidator', () => {
74 React.createElement(ComponentWrapper)
75 );
76
77 - expect(console.error.calls.count()).toBe(1);
78 - expect(console.error.calls.argsFor(0)[0]).toContain(
77 + expectDev(console.error.calls.count()).toBe(1);
78 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
79 'Each child in an array or iterator should have a unique "key" prop. ' +
80 'Check the render method of `InnerClass`. ' +
81 'It was passed a child from ComponentWrapper. '
@@ -98,8 +98,8 @@ describe('ReactElementValidator', () => {
98 ];
99 ReactTestUtils.renderIntoDocument(<Anonymous>{divs}</Anonymous>);
100
101 - expect(console.error.calls.count()).toBe(1);
102 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
101 + expectDev(console.error.calls.count()).toBe(1);
102 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
103 'Warning: Each child in an array or iterator should have a unique ' +
104 '"key" prop. See https://fb.me/react-warning-keys for more information.\n' +
105 ' in div (at **)'
@@ -115,8 +115,8 @@ describe('ReactElementValidator', () => {
115 ];
116 ReactTestUtils.renderIntoDocument(<div>{divs}</div>);
117
118 - expect(console.error.calls.count()).toBe(1);
119 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
118 + expectDev(console.error.calls.count()).toBe(1);
119 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
120 'Warning: Each child in an array or iterator should have a unique ' +
121 '"key" prop. Check the top-level render call using <div>. See ' +
122 'https://fb.me/react-warning-keys for more information.\n' +
@@ -147,8 +147,8 @@ describe('ReactElementValidator', () => {
147
148 ReactTestUtils.renderIntoDocument(<GrandParent />);
149
150 - expect(console.error.calls.count()).toBe(1);
151 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
150 + expectDev(console.error.calls.count()).toBe(1);
151 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
152 'Warning: Each child in an array or iterator should have a unique ' +
153 '"key" prop. Check the render method of `Component`. See ' +
154 'https://fb.me/react-warning-keys for more information.\n' +
@@ -180,7 +180,7 @@ describe('ReactElementValidator', () => {
180 </Wrapper>
181 );
182
183 - expect(console.error.calls.count()).toBe(0);
183 + expectDev(console.error.calls.count()).toBe(0);
184 });
185
186 it('warns for keys for iterables of elements in rest args', () => {
@@ -201,8 +201,8 @@ describe('ReactElementValidator', () => {
201
202 Component(null, iterable);
203
204 - expect(console.error.calls.count()).toBe(1);
205 - expect(console.error.calls.argsFor(0)[0]).toContain(
204 + expectDev(console.error.calls.count()).toBe(1);
205 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
206 'Each child in an array or iterator should have a unique "key" prop.'
207 );
208 });
@@ -213,7 +213,7 @@ describe('ReactElementValidator', () => {
213
214 Component(null, [Component({key: '#1'}), Component({key: '#2'})]);
215
216 - expect(console.error.calls.count()).toBe(0);
216 + expectDev(console.error.calls.count()).toBe(0);
217 });
218
219 it('does not warns for iterable elements with keys', () => {
@@ -237,7 +237,7 @@ describe('ReactElementValidator', () => {
237
238 Component(null, iterable);
239
240 - expect(console.error.calls.count()).toBe(0);
240 + expectDev(console.error.calls.count()).toBe(0);
241 });
242
243 it('does not warn when the element is directly in rest args', () => {
@@ -246,7 +246,7 @@ describe('ReactElementValidator', () => {
246
247 Component(null, Component(), Component());
248
249 - expect(console.error.calls.count()).toBe(0);
249 + expectDev(console.error.calls.count()).toBe(0);
250 });
251
252 it('does not warn when the array contains a non-element', () => {
@@ -255,7 +255,7 @@ describe('ReactElementValidator', () => {
255
256 Component(null, [{}, {}]);
257
258 - expect(console.error.calls.count()).toBe(0);
258 + expectDev(console.error.calls.count()).toBe(0);
259 });
260
261 // TODO: These warnings currently come from the composite component, but
@@ -280,7 +280,7 @@ describe('ReactElementValidator', () => {
280 },
281 });
282 ReactTestUtils.renderIntoDocument(React.createElement(ParentComp));
283 - expect(console.error.calls.argsFor(0)[0]).toBe(
283 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
284 'Warning: Failed prop type: ' +
285 'Invalid prop `color` of type `number` supplied to `MyComp`, ' +
286 'expected `string`.\n' +
@@ -295,29 +295,29 @@ describe('ReactElementValidator', () => {
295 React.createElement(null);
296 React.createElement(true);
297 React.createElement(123);
298 - expect(console.error.calls.count()).toBe(4);
299 - expect(console.error.calls.argsFor(0)[0]).toBe(
298 + expectDev(console.error.calls.count()).toBe(4);
299 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
300 'Warning: React.createElement: type should not be null, undefined, ' +
301 'boolean, or number. It should be a string (for DOM elements) or a ' +
302 'ReactClass (for composite components).'
303 );
304 - expect(console.error.calls.argsFor(1)[0]).toBe(
304 + expectDev(console.error.calls.argsFor(1)[0]).toBe(
305 'Warning: React.createElement: type should not be null, undefined, ' +
306 'boolean, or number. It should be a string (for DOM elements) or a ' +
307 'ReactClass (for composite components).'
308 );
309 - expect(console.error.calls.argsFor(2)[0]).toBe(
309 + expectDev(console.error.calls.argsFor(2)[0]).toBe(
310 'Warning: React.createElement: type should not be null, undefined, ' +
311 'boolean, or number. It should be a string (for DOM elements) or a ' +
312 'ReactClass (for composite components).'
313 );
314 - expect(console.error.calls.argsFor(3)[0]).toBe(
314 + expectDev(console.error.calls.argsFor(3)[0]).toBe(
315 'Warning: React.createElement: type should not be null, undefined, ' +
316 'boolean, or number. It should be a string (for DOM elements) or a ' +
317 'ReactClass (for composite components).'
318 );
319 React.createElement('div');
320 - expect(console.error.calls.count()).toBe(4);
320 + expectDev(console.error.calls.count()).toBe(4);
321 });
322
323 it('includes the owner name when passing null, undefined, boolean, or number', () => {
@@ -334,8 +334,8 @@ describe('ReactElementValidator', () => {
334 'or a class/function (for composite components) but got: null. Check ' +
335 'the render method of `ParentComp`.'
336 );
337 - expect(console.error.calls.count()).toBe(1);
338 - expect(console.error.calls.argsFor(0)[0]).toBe(
337 + expectDev(console.error.calls.count()).toBe(1);
338 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
339 'Warning: React.createElement: type should not be null, undefined, ' +
340 'boolean, or number. It should be a string (for DOM elements) or a ' +
341 'ReactClass (for composite components). Check the render method of ' +
@@ -358,8 +358,8 @@ describe('ReactElementValidator', () => {
358
359 ReactTestUtils.renderIntoDocument(React.createElement(Component));
360
361 - expect(console.error.calls.count()).toBe(1);
362 - expect(console.error.calls.argsFor(0)[0]).toBe(
361 + expectDev(console.error.calls.count()).toBe(1);
362 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
363 'Warning: Failed prop type: The prop `prop` is marked as required in ' +
364 '`Component`, but its value is `null`.\n' +
365 ' in Component'
@@ -383,8 +383,8 @@ describe('ReactElementValidator', () => {
383 React.createElement(Component, {prop:null})
384 );
385
386 - expect(console.error.calls.count()).toBe(1);
387 - expect(console.error.calls.argsFor(0)[0]).toBe(
386 + expectDev(console.error.calls.count()).toBe(1);
387 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
388 'Warning: Failed prop type: The prop `prop` is marked as required in ' +
389 '`Component`, but its value is `null`.\n' +
390 ' in Component'
@@ -410,15 +410,15 @@ describe('ReactElementValidator', () => {
410 React.createElement(Component, {prop: 42})
411 );
412
413 - expect(console.error.calls.count()).toBe(2);
414 - expect(console.error.calls.argsFor(0)[0]).toBe(
413 + expectDev(console.error.calls.count()).toBe(2);
414 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
415 'Warning: Failed prop type: ' +
416 'The prop `prop` is marked as required in `Component`, but its value ' +
417 'is `undefined`.\n' +
418 ' in Component'
419 );
420
421 - expect(console.error.calls.argsFor(1)[0]).toBe(
421 + expectDev(console.error.calls.argsFor(1)[0]).toBe(
422 'Warning: Failed prop type: ' +
423 'Invalid prop `prop` of type `number` supplied to ' +
424 '`Component`, expected `string`.\n' +
@@ -430,7 +430,7 @@ describe('ReactElementValidator', () => {
430 );
431
432 // Should not error for strings
433 - expect(console.error.calls.count()).toBe(2);
433 + expectDev(console.error.calls.count()).toBe(2);
434 });
435
436 it('should warn if a PropType creator is used as a PropType', () => {
@@ -449,8 +449,8 @@ describe('ReactElementValidator', () => {
449 React.createElement(Component, {myProp: {value: 'hi'}})
450 );
451
452 - expect(console.error.calls.count()).toBe(1);
453 - expect(console.error.calls.argsFor(0)[0]).toBe(
452 + expectDev(console.error.calls.count()).toBe(1);
453 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
454 'Warning: Component: type specification of prop `myProp` is invalid; ' +
455 'the type checker function must return `null` or an `Error` but ' +
456 'returned a function. You may have forgotten to pass an argument to ' +
@@ -468,14 +468,14 @@ describe('ReactElementValidator', () => {
468 });
469 var TestFactory = React.createFactory(TestComponent);
470 expect(TestFactory.type).toBe(TestComponent);
471 - expect(console.error.calls.count()).toBe(1);
472 - expect(console.error.calls.argsFor(0)[0]).toBe(
471 + expectDev(console.error.calls.count()).toBe(1);
472 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
473 'Warning: Factory.type is deprecated. Access the class directly before ' +
474 'passing it to createFactory.'
475 );
476 // Warn once, not again
477 expect(TestFactory.type).toBe(TestComponent);
478 - expect(console.error.calls.count()).toBe(1);
478 + expectDev(console.error.calls.count()).toBe(1);
479 });
480
481 it('does not warn when using DOM node as children', () => {
@@ -492,7 +492,7 @@ describe('ReactElementValidator', () => {
492 var node = document.createElement('div');
493 // This shouldn't cause a stack overflow or any other problems (#3883)
494 ReactTestUtils.renderIntoDocument(<DOMContainer>{node}</DOMContainer>);
495 - expect(console.error.calls.count()).toBe(0);
495 + expectDev(console.error.calls.count()).toBe(0);
496 });
497
498 it('should not enumerate enumerable numbers (#4776)', () => {
@@ -535,8 +535,8 @@ describe('ReactElementValidator', () => {
535 spyOn(console, 'error');
536 var Foo = undefined;
537 void <Foo>{[<div />]}</Foo>;
538 - expect(console.error.calls.count()).toBe(1);
539 - expect(console.error.calls.argsFor(0)[0]).toBe(
538 + expectDev(console.error.calls.count()).toBe(1);
539 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
540 'Warning: React.createElement: type should not be null, undefined, ' +
541 'boolean, or number. It should be a string (for DOM elements) or a ' +
542 'ReactClass (for composite components).'
src/isomorphic/classic/types/__tests__/ReactPropTypes-test.js
+9 -9
@@ -310,7 +310,7 @@ describe('ReactPropTypes', () => {
310 var instance = <Component label={<div />} />;
311 instance = ReactTestUtils.renderIntoDocument(instance);
312
313 - expect(console.error.calls.count()).toBe(0);
313 + expectDev(console.error.calls.count()).toBe(0);
314 });
315
316 it('should warn when passing no label and isRequired is set', () => {
@@ -319,7 +319,7 @@ describe('ReactPropTypes', () => {
319 var instance = <Component />;
320 instance = ReactTestUtils.renderIntoDocument(instance);
321
322 - expect(console.error.calls.count()).toBe(1);
322 + expectDev(console.error.calls.count()).toBe(1);
323 });
324
325 it('should be implicitly optional and not warn without values', () => {
@@ -454,7 +454,7 @@ describe('ReactPropTypes', () => {
454 k4: null,
455 k5: undefined,
456 }));
457 - expect(console.error.calls.count()).toBe(0);
457 + expectDev(console.error.calls.count()).toBe(0);
458 });
459
460 it('should not warn for iterables', () => {
@@ -612,8 +612,8 @@ describe('ReactPropTypes', () => {
612
613 PropTypes.oneOf('red', 'blue');
614
615 - expect(console.error).toHaveBeenCalled();
616 - expect(console.error.calls.argsFor(0)[0])
615 + expectDev(console.error).toHaveBeenCalled();
616 + expectDev(console.error.calls.argsFor(0)[0])
617 .toContain('Invalid argument supplied to oneOf, expected an instance of array.');
618
619 typeCheckPass(PropTypes.oneOf('red', 'blue'), 'red');
@@ -668,8 +668,8 @@ describe('ReactPropTypes', () => {
668
669 PropTypes.oneOfType(PropTypes.string, PropTypes.number);
670
671 - expect(console.error).toHaveBeenCalled();
672 - expect(console.error.calls.argsFor(0)[0])
671 + expectDev(console.error).toHaveBeenCalled();
672 + expectDev(console.error.calls.argsFor(0)[0])
673 .toContain('Invalid argument supplied to oneOfType, expected an instance of array.');
674
675 typeCheckPass(PropTypes.oneOf(PropTypes.string, PropTypes.number), []);
@@ -893,7 +893,7 @@ describe('ReactPropTypes', () => {
893
894 var instance = <Component num={6} />;
895 instance = ReactTestUtils.renderIntoDocument(instance);
896 - expect(console.error.calls.count()).toBe(1);
896 + expectDev(console.error.calls.count()).toBe(1);
897 expect(
898 console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
899 ).toBe(
@@ -920,7 +920,7 @@ describe('ReactPropTypes', () => {
920
921 var instance = <Component num={5} />;
922 instance = ReactTestUtils.renderIntoDocument(instance);
923 - expect(console.error.calls.count()).toBe(0);
923 + expectDev(console.error.calls.count()).toBe(0);
924 }
925 );
926 });
src/isomorphic/modern/element/__tests__/ReactJSXElement-test.js
+5 -5
@@ -100,21 +100,21 @@ describe('ReactJSXElement', () => {
100 var a = 1;
101 var element = <Component children="text">{a}</Component>;
102 expect(element.props.children).toBe(a);
103 - expect(console.error.calls.count()).toBe(0);
103 + expectDev(console.error.calls.count()).toBe(0);
104 });
105
106 it('does not override children if no JSX children are provided', () => {
107 spyOn(console, 'error');
108 var element = <Component children="text" />;
109 expect(element.props.children).toBe('text');
110 - expect(console.error.calls.count()).toBe(0);
110 + expectDev(console.error.calls.count()).toBe(0);
111 });
112
113 it('overrides children if null is provided as a JSX child', () => {
114 spyOn(console, 'error');
115 var element = <Component children="text">{null}</Component>;
116 expect(element.props.children).toBe(null);
117 - expect(console.error.calls.count()).toBe(0);
117 + expectDev(console.error.calls.count()).toBe(0);
118 });
119
120 it('overrides children if undefined is provided as an argument', () => {
@@ -136,7 +136,7 @@ describe('ReactJSXElement', () => {
136 var c = 3;
137 var element = <Component>{a}{b}{c}</Component>;
138 expect(element.props.children).toEqual([1, 2, 3]);
139 - expect(console.error.calls.count()).toBe(0);
139 + expectDev(console.error.calls.count()).toBe(0);
140 });
141
142 it('allows static methods to be called using the type property', () => {
@@ -153,7 +153,7 @@ describe('ReactJSXElement', () => {
153
154 var element = <StaticMethodComponent />;
155 expect(element.type.someStaticMethod()).toBe('someReturnValue');
156 - expect(console.error.calls.count()).toBe(0);
156 + expectDev(console.error.calls.count()).toBe(0);
157 });
158
159 it('identifies valid elements', () => {
src/isomorphic/modern/element/__tests__/ReactJSXElementValidator-test.js
+27 -27
@@ -47,8 +47,8 @@ describe('ReactJSXElementValidator', () => {
47
48 void <Component>{[<Component />, <Component />]}</Component>;
49
50 - expect(console.error.calls.count()).toBe(1);
51 - expect(console.error.calls.argsFor(0)[0]).toContain(
50 + expectDev(console.error.calls.count()).toBe(1);
51 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
52 'Each child in an array or iterator should have a unique "key" prop.'
53 );
54 });
@@ -74,8 +74,8 @@ describe('ReactJSXElementValidator', () => {
74
75 ReactTestUtils.renderIntoDocument(<ComponentWrapper />);
76
77 - expect(console.error.calls.count()).toBe(1);
78 - expect(console.error.calls.argsFor(0)[0]).toContain(
77 + expectDev(console.error.calls.count()).toBe(1);
78 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
79 'Each child in an array or iterator should have a unique "key" prop. ' +
80 'Check the render method of `InnerComponent`. ' +
81 'It was passed a child from ComponentWrapper. '
@@ -99,8 +99,8 @@ describe('ReactJSXElementValidator', () => {
99
100 void <Component>{iterable}</Component>;
101
102 - expect(console.error.calls.count()).toBe(1);
103 - expect(console.error.calls.argsFor(0)[0]).toContain(
102 + expectDev(console.error.calls.count()).toBe(1);
103 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
104 'Each child in an array or iterator should have a unique "key" prop.'
105 );
106 });
@@ -110,7 +110,7 @@ describe('ReactJSXElementValidator', () => {
110
111 void <Component>{[<Component key="#1" />, <Component key="#2" />]}</Component>;
112
113 - expect(console.error.calls.count()).toBe(0);
113 + expectDev(console.error.calls.count()).toBe(0);
114 });
115
116 it('does not warns for iterable elements with keys', () => {
@@ -133,7 +133,7 @@ describe('ReactJSXElementValidator', () => {
133
134 void <Component>{iterable}</Component>;
135
136 - expect(console.error.calls.count()).toBe(0);
136 + expectDev(console.error.calls.count()).toBe(0);
137 });
138
139 it('does not warn for numeric keys in entry iterable as a child', () => {
@@ -154,7 +154,7 @@ describe('ReactJSXElementValidator', () => {
154
155 void <Component>{iterable}</Component>;
156
157 - expect(console.error.calls.count()).toBe(0);
157 + expectDev(console.error.calls.count()).toBe(0);
158 });
159
160 it('does not warn when the element is directly as children', () => {
@@ -162,7 +162,7 @@ describe('ReactJSXElementValidator', () => {
162
163 void <Component><Component /><Component /></Component>;
164
165 - expect(console.error.calls.count()).toBe(0);
165 + expectDev(console.error.calls.count()).toBe(0);
166 });
167
168 it('does not warn when the child array contains non-elements', () => {
@@ -170,7 +170,7 @@ describe('ReactJSXElementValidator', () => {
170
171 void <Component>{[{}, {}]}</Component>;
172
173 - expect(console.error.calls.count()).toBe(0);
173 + expectDev(console.error.calls.count()).toBe(0);
174 });
175
176 // TODO: These warnings currently come from the composite component, but
@@ -217,25 +217,25 @@ describe('ReactJSXElementValidator', () => {
217 void <Null />;
218 void <True />;
219 void <Num />;
220 - expect(console.error.calls.count()).toBe(4);
221 - expect(console.error.calls.argsFor(0)[0]).toContain(
220 + expectDev(console.error.calls.count()).toBe(4);
221 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
222 'type should not be null, undefined, boolean, or number. It should be ' +
223 'a string (for DOM elements) or a ReactClass (for composite components).'
224 );
225 - expect(console.error.calls.argsFor(1)[0]).toContain(
225 + expectDev(console.error.calls.argsFor(1)[0]).toContain(
226 'type should not be null, undefined, boolean, or number. It should be ' +
227 'a string (for DOM elements) or a ReactClass (for composite components).'
228 );
229 - expect(console.error.calls.argsFor(2)[0]).toContain(
229 + expectDev(console.error.calls.argsFor(2)[0]).toContain(
230 'type should not be null, undefined, boolean, or number. It should be ' +
231 'a string (for DOM elements) or a ReactClass (for composite components).'
232 );
233 - expect(console.error.calls.argsFor(3)[0]).toContain(
233 + expectDev(console.error.calls.argsFor(3)[0]).toContain(
234 'type should not be null, undefined, boolean, or number. It should be ' +
235 'a string (for DOM elements) or a ReactClass (for composite components).'
236 );
237 void <Div />;
238 - expect(console.error.calls.count()).toBe(4);
238 + expectDev(console.error.calls.count()).toBe(4);
239 });
240
241 it('should check default prop values', () => {
@@ -245,7 +245,7 @@ describe('ReactJSXElementValidator', () => {
245
246 ReactTestUtils.renderIntoDocument(<RequiredPropComponent />);
247
248 - expect(console.error.calls.count()).toBe(1);
248 + expectDev(console.error.calls.count()).toBe(1);
249 expect(
250 console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
251 ).toBe(
@@ -260,7 +260,7 @@ describe('ReactJSXElementValidator', () => {
260
261 ReactTestUtils.renderIntoDocument(<RequiredPropComponent prop={null} />);
262
263 - expect(console.error.calls.count()).toBe(1);
263 + expectDev(console.error.calls.count()).toBe(1);
264 expect(
265 console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
266 ).toBe(
@@ -276,7 +276,7 @@ describe('ReactJSXElementValidator', () => {
276 ReactTestUtils.renderIntoDocument(<RequiredPropComponent />);
277 ReactTestUtils.renderIntoDocument(<RequiredPropComponent prop={42} />);
278
279 - expect(console.error.calls.count()).toBe(2);
279 + expectDev(console.error.calls.count()).toBe(2);
280 expect(
281 console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
282 ).toBe(
@@ -298,7 +298,7 @@ describe('ReactJSXElementValidator', () => {
298 ReactTestUtils.renderIntoDocument(<RequiredPropComponent prop="string" />);
299
300 // Should not error for strings
301 - expect(console.error.calls.count()).toBe(2);
301 + expectDev(console.error.calls.count()).toBe(2);
302 });
303
304 it('should warn on invalid prop types', () => {
@@ -316,8 +316,8 @@ describe('ReactJSXElementValidator', () => {
316 prop: null,
317 };
318 ReactTestUtils.renderIntoDocument(<NullPropTypeComponent />);
319 - expect(console.error.calls.count()).toBe(1);
320 - expect(console.error.calls.argsFor(0)[0]).toContain(
319 + expectDev(console.error.calls.count()).toBe(1);
320 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
321 'NullPropTypeComponent: prop type `prop` is invalid; it must be a ' +
322 'function, usually from React.PropTypes.'
323 );
@@ -334,8 +334,8 @@ describe('ReactJSXElementValidator', () => {
334 prop: null,
335 };
336 ReactTestUtils.renderIntoDocument(<NullContextTypeComponent />);
337 - expect(console.error.calls.count()).toBe(1);
338 - expect(console.error.calls.argsFor(0)[0]).toContain(
337 + expectDev(console.error.calls.count()).toBe(1);
338 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
339 'NullContextTypeComponent: context type `prop` is invalid; it must ' +
340 'be a function, usually from React.PropTypes.'
341 );
@@ -352,8 +352,8 @@ describe('ReactJSXElementValidator', () => {
352 prop: 'foo',
353 });
354 ReactTestUtils.renderIntoDocument(<GetDefaultPropsComponent />);
355 - expect(console.error.calls.count()).toBe(1);
356 - expect(console.error.calls.argsFor(0)[0]).toContain(
355 + expectDev(console.error.calls.count()).toBe(1);
356 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
357 'getDefaultProps is only used on classic React.createClass definitions.' +
358 ' Use a static property named `defaultProps` instead.'
359 );
src/renderers/dom/__tests__/ReactDOMProduction-test.js
+2 -2
@@ -36,7 +36,7 @@ describe('ReactDOMProduction', () => {
36
37 spyOn(console, 'error');
38 warning(false, 'Do cows go moo?');
39 - expect(console.error.calls.count()).toBe(0);
39 + expectDev(console.error.calls.count()).toBe(0);
40 });
41
42 it('should use prod React', () => {
@@ -45,7 +45,7 @@ describe('ReactDOMProduction', () => {
45 // no key warning
46 void <div>{[<span />]}</div>;
47
48 - expect(console.error.calls.count()).toBe(0);
48 + expectDev(console.error.calls.count()).toBe(0);
49 });
50
51 it('should handle a simple flow', () => {
src/renderers/dom/shared/__tests__/CSSPropertyOperations-test.js
+13 -13
@@ -119,8 +119,8 @@ describe('CSSPropertyOperations', () => {
119 spyOn(console, 'error');
120 var root = document.createElement('div');
121 ReactDOM.render(<Comp />, root);
122 - expect(console.error.calls.count()).toBe(1);
123 - expect(console.error.calls.argsFor(0)[0]).toEqual(
122 + expectDev(console.error.calls.count()).toBe(1);
123 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
124 'Warning: Unsupported style property background-color. Did you mean backgroundColor? ' +
125 'Check the render method of `Comp`.'
126 );
@@ -144,12 +144,12 @@ describe('CSSPropertyOperations', () => {
144 ReactDOM.render(<Comp />, root);
145 ReactDOM.render(<Comp style={styles} />, root);
146
147 - expect(console.error.calls.count()).toBe(2);
148 - expect(console.error.calls.argsFor(0)[0]).toEqual(
147 + expectDev(console.error.calls.count()).toBe(2);
148 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
149 'Warning: Unsupported style property -ms-transform. Did you mean msTransform? ' +
150 'Check the render method of `Comp`.'
151 );
152 - expect(console.error.calls.argsFor(1)[0]).toEqual(
152 + expectDev(console.error.calls.argsFor(1)[0]).toEqual(
153 'Warning: Unsupported style property -webkit-transform. Did you mean WebkitTransform? ' +
154 'Check the render method of `Comp`.'
155 );
@@ -172,12 +172,12 @@ describe('CSSPropertyOperations', () => {
172 var root = document.createElement('div');
173 ReactDOM.render(<Comp />, root);
174 // msTransform is correct already and shouldn't warn
175 - expect(console.error.calls.count()).toBe(2);
176 - expect(console.error.calls.argsFor(0)[0]).toEqual(
175 + expectDev(console.error.calls.count()).toBe(2);
176 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
177 'Warning: Unsupported vendor-prefixed style property oTransform. ' +
178 'Did you mean OTransform? Check the render method of `Comp`.'
179 );
180 - expect(console.error.calls.argsFor(1)[0]).toEqual(
180 + expectDev(console.error.calls.argsFor(1)[0]).toEqual(
181 'Warning: Unsupported vendor-prefixed style property webkitTransform. ' +
182 'Did you mean WebkitTransform? Check the render method of `Comp`.'
183 );
@@ -200,12 +200,12 @@ describe('CSSPropertyOperations', () => {
200 spyOn(console, 'error');
201 var root = document.createElement('div');
202 ReactDOM.render(<Comp />, root);
203 - expect(console.error.calls.count()).toBe(2);
204 - expect(console.error.calls.argsFor(0)[0]).toEqual(
203 + expectDev(console.error.calls.count()).toBe(2);
204 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
205 'Warning: Style property values shouldn\'t contain a semicolon. ' +
206 'Check the render method of `Comp`. Try "backgroundColor: blue" instead.',
207 );
208 - expect(console.error.calls.argsFor(1)[0]).toEqual(
208 + expectDev(console.error.calls.argsFor(1)[0]).toEqual(
209 'Warning: Style property values shouldn\'t contain a semicolon. ' +
210 'Check the render method of `Comp`. Try "color: red" instead.',
211 );
@@ -224,8 +224,8 @@ describe('CSSPropertyOperations', () => {
224 var root = document.createElement('div');
225 ReactDOM.render(<Comp />, root);
226
227 - expect(console.error.calls.count()).toBe(1);
228 - expect(console.error.calls.argsFor(0)[0]).toEqual(
227 + expectDev(console.error.calls.count()).toBe(1);
228 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
229 'Warning: `NaN` is an invalid value for the `fontSize` css style property. ' +
230 'Check the render method of `Comp`.'
231 );
src/renderers/dom/shared/__tests__/ReactBrowserEventEmitter-test.js
+1 -1
@@ -269,7 +269,7 @@ describe('ReactBrowserEventEmitter', () => {
269 expect(idCallOrder[0]).toBe(getInternal(CHILD));
270 expect(idCallOrder[1]).toBe(getInternal(PARENT));
271 expect(idCallOrder[2]).toBe(getInternal(GRANDPARENT));
272 - expect(console.error.calls.count()).toEqual(0);
272 + expectDev(console.error.calls.count()).toEqual(0);
273 });
274
275 /**
src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js
+83 -83
@@ -20,7 +20,7 @@ describe('ReactDOMComponent', () => {
20 var inputValueTracking;
21
22 function normalizeCodeLocInfo(str) {
23 - return str.replace(/\(at .+?:\d+\)/g, '(at **)');
23 + return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
24 }
25
26 beforeEach(() => {
@@ -128,8 +128,8 @@ describe('ReactDOMComponent', () => {
128 var stub = ReactTestUtils.renderIntoDocument(<App />);
129 style.position = 'absolute';
130 stub.setState({style: style});
131 - expect(console.error.calls.count()).toBe(1);
132 - expect(console.error.calls.argsFor(0)[0]).toEqual(
131 + expectDev(console.error.calls.count()).toBe(1);
132 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
133 'Warning: `div` was passed a style object that has previously been ' +
134 'mutated. Mutating `style` is deprecated. Consider cloning it ' +
135 'beforehand. Check the `render` of `App`. Previous style: ' +
@@ -142,22 +142,22 @@ describe('ReactDOMComponent', () => {
142 style.background = 'green';
143 stub.setState({style: {background: 'green'}});
144 // already warned once for the same component and owner
145 - expect(console.error.calls.count()).toBe(1);
145 + expectDev(console.error.calls.count()).toBe(1);
146
147 style = {background: 'red'};
148 var div = document.createElement('div');
149 ReactDOM.render(<span style={style}></span>, div);
150 style.background = 'blue';
151 ReactDOM.render(<span style={style}></span>, div);
152 - expect(console.error.calls.count()).toBe(2);
152 + expectDev(console.error.calls.count()).toBe(2);
153 });
154
155 it('should warn for unknown prop', () => {
156 spyOn(console, 'error');
157 var container = document.createElement('div');
158 ReactDOM.render(<div foo="bar" />, container);
159 - expect(console.error.calls.count(0)).toBe(1);
160 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
159 + expectDev(console.error.calls.count(0)).toBe(1);
160 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
161 'Warning: Unknown prop `foo` on <div> tag. Remove this prop from the element. ' +
162 'For details, see https://fb.me/react-unknown-prop\n in div (at **)'
163 );
@@ -167,8 +167,8 @@ describe('ReactDOMComponent', () => {
167 spyOn(console, 'error');
168 var container = document.createElement('div');
169 ReactDOM.render(<div foo="bar" baz="qux" />, container);
170 - expect(console.error.calls.count(0)).toBe(1);
171 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
170 + expectDev(console.error.calls.count(0)).toBe(1);
171 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
172 'Warning: Unknown props `foo`, `baz` on <div> tag. Remove these props from the element. ' +
173 'For details, see https://fb.me/react-unknown-prop\n in div (at **)'
174 );
@@ -178,8 +178,8 @@ describe('ReactDOMComponent', () => {
178 spyOn(console, 'error');
179 var container = document.createElement('div');
180 ReactDOM.render(<div onDblClick={() => {}} />, container);
181 - expect(console.error.calls.count(0)).toBe(1);
182 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
181 + expectDev(console.error.calls.count(0)).toBe(1);
182 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
183 'Warning: Unknown event handler property onDblClick. Did you mean `onDoubleClick`?\n in div (at **)'
184 );
185 });
@@ -194,7 +194,7 @@ describe('ReactDOMComponent', () => {
194 }
195
196 ReactTestUtils.renderIntoDocument(<Component />);
197 - expect(console.error.calls.count()).toBe(0);
197 + expectDev(console.error.calls.count()).toBe(0);
198 });
199
200 it('should warn nicely about NaN in style', () => {
@@ -205,8 +205,8 @@ describe('ReactDOMComponent', () => {
205 ReactDOM.render(<span style={style}></span>, div);
206 ReactDOM.render(<span style={style}></span>, div);
207
208 - expect(console.error.calls.count()).toBe(1);
209 - expect(console.error.calls.argsFor(0)[0]).toEqual(
208 + expectDev(console.error.calls.count()).toBe(1);
209 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
210 'Warning: `NaN` is an invalid value for the `fontSize` css style property.',
211 );
212 });
@@ -362,8 +362,8 @@ describe('ReactDOMComponent', () => {
362 );
363 ReactDOM.render(element, container);
364 }
365 - expect(console.error.calls.count()).toBe(1);
366 - expect(console.error.calls.argsFor(0)[0]).toEqual(
365 + expectDev(console.error.calls.count()).toBe(1);
366 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
367 'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
368 );
369 });
@@ -382,8 +382,8 @@ describe('ReactDOMComponent', () => {
382 );
383 ReactDOM.render(afterUpdate, container);
384 }
385 - expect(console.error.calls.count()).toBe(1);
386 - expect(console.error.calls.argsFor(0)[0]).toEqual(
385 + expectDev(console.error.calls.count()).toBe(1);
386 + expectDev(console.error.calls.argsFor(0)[0]).toEqual(
387 'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
388 );
389 });
@@ -769,8 +769,8 @@ describe('ReactDOMComponent', () => {
769 errorEvent.initEvent('error', false, false);
770 container.getElementsByTagName('source')[0].dispatchEvent(errorEvent);
771
772 - expect(console.error.calls.count()).toBe(1);
773 - expect(console.error.calls.argsFor(0)[0]).toContain(
772 + expectDev(console.error.calls.count()).toBe(1);
773 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
774 'onError called'
775 );
776 });
@@ -830,13 +830,13 @@ describe('ReactDOMComponent', () => {
830 });
831 var node = document.createElement('div');
832 ReactDOM.render(<ShadyComponent />, node);
833 - expect(console.error.calls.count()).toBe(1);
834 - expect(console.error.calls.argsFor(0)[0]).toContain(
833 + expectDev(console.error.calls.count()).toBe(1);
834 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
835 'ShadyComponent is using shady DOM. Using shady DOM with React can ' +
836 'cause things to break subtly.'
837 );
838 mountComponent({is: 'custom-shady-div2'});
839 - expect(console.error.calls.count()).toBe(1);
839 + expectDev(console.error.calls.count()).toBe(1);
840
841 } finally {
842 document.createElement = defaultCreateElement;
@@ -858,14 +858,14 @@ describe('ReactDOMComponent', () => {
858 };
859
860 mountComponent({is: 'custom-shady-div'});
861 - expect(console.error.calls.count()).toBe(1);
862 - expect(console.error.calls.argsFor(0)[0]).toContain(
861 + expectDev(console.error.calls.count()).toBe(1);
862 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
863 'A component is using shady DOM. Using shady DOM with React can ' +
864 'cause things to break subtly.'
865 );
866
867 mountComponent({is: 'custom-shady-div2'});
868 - expect(console.error.calls.count()).toBe(1);
868 + expectDev(console.error.calls.count()).toBe(1);
869
870 } finally {
871 document.createElement = defaultCreateElement;
@@ -901,8 +901,8 @@ describe('ReactDOMComponent', () => {
901
902 spyOn(console, 'error');
903 mountComponent({innerHTML: '<span>Hi Jim!</span>'});
904 - expect(console.error.calls.count()).toBe(1);
905 - expect(console.error.calls.argsFor(0)[0]).toContain(
904 + expectDev(console.error.calls.count()).toBe(1);
905 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
906 'Directly setting property `innerHTML` is not permitted. '
907 );
908 });
@@ -934,14 +934,14 @@ describe('ReactDOMComponent', () => {
934 it('should warn about contentEditable and children', () => {
935 spyOn(console, 'error');
936 mountComponent({contentEditable: true, children: ''});
937 - expect(console.error.calls.count()).toBe(1);
938 - expect(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
937 + expectDev(console.error.calls.count()).toBe(1);
938 + expectDev(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
939 });
940
941 it('should respect suppressContentEditableWarning', () => {
942 spyOn(console, 'error');
943 mountComponent({contentEditable: true, children: '', suppressContentEditableWarning: true});
944 - expect(console.error.calls.count()).toBe(0);
944 + expectDev(console.error.calls.count()).toBe(0);
945 });
946
947 it('should validate against invalid styles', () => {
@@ -1106,8 +1106,8 @@ describe('ReactDOMComponent', () => {
1106 <div contentEditable={true}><div /></div>,
1107 container
1108 );
1109 - expect(console.error.calls.count()).toBe(1);
1110 - expect(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
1109 + expectDev(console.error.calls.count()).toBe(1);
1110 + expectDev(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
1111 });
1112
1113 it('should validate against invalid styles', () => {
@@ -1237,8 +1237,8 @@ describe('ReactDOMComponent', () => {
1237
1238 spyOn(console, 'error');
1239 ReactTestUtils.renderIntoDocument(<div onScroll={function() {}} />);
1240 - expect(console.error.calls.count()).toBe(1);
1241 - expect(console.error.calls.argsFor(0)[0]).toBe(
1240 + expectDev(console.error.calls.count()).toBe(1);
1241 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
1242 'Warning: This browser doesn\'t support the `onScroll` event'
1243 );
1244 });
@@ -1246,7 +1246,7 @@ describe('ReactDOMComponent', () => {
1246 it('should not warn when server-side rendering `onScroll`', () => {
1247 spyOn(console, 'error');
1248 ReactDOMServer.renderToString(<div onScroll={() => {}}/>);
1249 - expect(console.error).not.toHaveBeenCalled();
1249 + expectDev(console.error).not.toHaveBeenCalled();
1250 });
1251 });
1252
@@ -1283,8 +1283,8 @@ describe('ReactDOMComponent', () => {
1283 spyOn(console, 'error');
1284 ReactTestUtils.renderIntoDocument(<div><tr /><tr /></div>);
1285
1286 - expect(console.error.calls.count()).toBe(1);
1287 - expect(console.error.calls.argsFor(0)[0]).toBe(
1286 + expectDev(console.error.calls.count()).toBe(1);
1287 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
1288 'Warning: validateDOMNesting(...): <tr> cannot appear as a child of ' +
1289 '<div>. See div > tr.'
1290 );
@@ -1295,8 +1295,8 @@ describe('ReactDOMComponent', () => {
1295 var p = document.createElement('p');
1296 ReactDOM.render(<span><p /></span>, p);
1297
1298 - expect(console.error.calls.count()).toBe(1);
1299 - expect(console.error.calls.argsFor(0)[0]).toBe(
1298 + expectDev(console.error.calls.count()).toBe(1);
1299 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
1300 'Warning: validateDOMNesting(...): <p> cannot appear as a descendant ' +
1301 'of <p>. See p > ... > p.'
1302 );
@@ -1319,17 +1319,17 @@ describe('ReactDOMComponent', () => {
1319
1320 ReactTestUtils.renderIntoDocument(<Foo />);
1321
1322 - expect(console.error.calls.count()).toBe(3);
1323 - expect(console.error.calls.argsFor(0)[0]).toBe(
1322 + expectDev(console.error.calls.count()).toBe(3);
1323 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
1324 'Warning: validateDOMNesting(...): <tr> cannot appear as a child of ' +
1325 '<table>. See Foo > table > Row > tr. Add a <tbody> to your code to ' +
1326 'match the DOM tree generated by the browser.'
1327 );
1328 - expect(console.error.calls.argsFor(1)[0]).toBe(
1328 + expectDev(console.error.calls.argsFor(1)[0]).toBe(
1329 'Warning: validateDOMNesting(...): Text nodes cannot appear as a ' +
1330 'child of <tr>. See Row > tr > #text.'
1331 );
1332 - expect(console.error.calls.argsFor(2)[0]).toBe(
1332 + expectDev(console.error.calls.argsFor(2)[0]).toBe(
1333 'Warning: validateDOMNesting(...): Whitespace text nodes cannot ' +
1334 'appear as a child of <table>. Make sure you don\'t have any extra ' +
1335 'whitespace between tags on each line of your source code. See Foo > ' +
@@ -1365,8 +1365,8 @@ describe('ReactDOMComponent', () => {
1365 render: () => <Viz1 />,
1366 });
1367 ReactTestUtils.renderIntoDocument(<App1 />);
1368 - expect(console.error.calls.count()).toBe(1);
1369 - expect(console.error.calls.argsFor(0)[0]).toContain(
1368 + expectDev(console.error.calls.count()).toBe(1);
1369 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
1370 'See Viz1 > table > FancyRow > Row > tr.'
1371 );
1372
@@ -1377,26 +1377,26 @@ describe('ReactDOMComponent', () => {
1377 render: () => <Viz2 />,
1378 });
1379 ReactTestUtils.renderIntoDocument(<App2 />);
1380 - expect(console.error.calls.count()).toBe(2);
1381 - expect(console.error.calls.argsFor(1)[0]).toContain(
1380 + expectDev(console.error.calls.count()).toBe(2);
1381 + expectDev(console.error.calls.argsFor(1)[0]).toContain(
1382 'See Viz2 > FancyTable > Table > table > FancyRow > Row > tr.'
1383 );
1384
1385 ReactTestUtils.renderIntoDocument(<FancyTable><FancyRow /></FancyTable>);
1386 - expect(console.error.calls.count()).toBe(3);
1387 - expect(console.error.calls.argsFor(2)[0]).toContain(
1386 + expectDev(console.error.calls.count()).toBe(3);
1387 + expectDev(console.error.calls.argsFor(2)[0]).toContain(
1388 'See FancyTable > Table > table > FancyRow > Row > tr.'
1389 );
1390
1391 ReactTestUtils.renderIntoDocument(<table><FancyRow /></table>);
1392 - expect(console.error.calls.count()).toBe(4);
1393 - expect(console.error.calls.argsFor(3)[0]).toContain(
1392 + expectDev(console.error.calls.count()).toBe(4);
1393 + expectDev(console.error.calls.argsFor(3)[0]).toContain(
1394 'See table > FancyRow > Row > tr.'
1395 );
1396
1397 ReactTestUtils.renderIntoDocument(<FancyTable><tr /></FancyTable>);
1398 - expect(console.error.calls.count()).toBe(5);
1399 - expect(console.error.calls.argsFor(4)[0]).toContain(
1398 + expectDev(console.error.calls.count()).toBe(5);
1399 + expectDev(console.error.calls.argsFor(4)[0]).toContain(
1400 'See FancyTable > Table > table > tr.'
1401 );
1402
@@ -1407,8 +1407,8 @@ describe('ReactDOMComponent', () => {
1407 }
1408
1409 ReactTestUtils.renderIntoDocument(<Link><div><Link /></div></Link>);
1410 - expect(console.error.calls.count()).toBe(6);
1411 - expect(console.error.calls.argsFor(5)[0]).toContain(
1410 + expectDev(console.error.calls.count()).toBe(6);
1411 + expectDev(console.error.calls.argsFor(5)[0]).toContain(
1412 'See Link > a > ... > Link > a.'
1413 );
1414 });
@@ -1416,59 +1416,59 @@ describe('ReactDOMComponent', () => {
1416 it('should warn about incorrect casing on properties (ssr)', () => {
1417 spyOn(console, 'error');
1418 ReactDOMServer.renderToString(React.createElement('input', {type: 'text', tabindex: '1'}));
1419 - expect(console.error.calls.count()).toBe(1);
1420 - expect(console.error.calls.argsFor(0)[0]).toContain('tabIndex');
1419 + expectDev(console.error.calls.count()).toBe(1);
1420 + expectDev(console.error.calls.argsFor(0)[0]).toContain('tabIndex');
1421 });
1422
1423 it('should warn about incorrect casing on event handlers (ssr)', () => {
1424 spyOn(console, 'error');
1425 ReactDOMServer.renderToString(React.createElement('input', {type: 'text', onclick: '1'}));
1426 ReactDOMServer.renderToString(React.createElement('input', {type: 'text', onKeydown: '1'}));
1427 - expect(console.error.calls.count()).toBe(2);
1428 - expect(console.error.calls.argsFor(0)[0]).toContain('onClick');
1429 - expect(console.error.calls.argsFor(1)[0]).toContain('onKeyDown');
1427 + expectDev(console.error.calls.count()).toBe(2);
1428 + expectDev(console.error.calls.argsFor(0)[0]).toContain('onClick');
1429 + expectDev(console.error.calls.argsFor(1)[0]).toContain('onKeyDown');
1430 });
1431
1432 it('should warn about incorrect casing on properties', () => {
1433 spyOn(console, 'error');
1434 ReactTestUtils.renderIntoDocument(React.createElement('input', {type: 'text', tabindex: '1'}));
1435 - expect(console.error.calls.count()).toBe(1);
1436 - expect(console.error.calls.argsFor(0)[0]).toContain('tabIndex');
1435 + expectDev(console.error.calls.count()).toBe(1);
1436 + expectDev(console.error.calls.argsFor(0)[0]).toContain('tabIndex');
1437 });
1438
1439 it('should warn about incorrect casing on event handlers', () => {
1440 spyOn(console, 'error');
1441 ReactTestUtils.renderIntoDocument(React.createElement('input', {type: 'text', onclick: '1'}));
1442 ReactTestUtils.renderIntoDocument(React.createElement('input', {type: 'text', onKeydown: '1'}));
1443 - expect(console.error.calls.count()).toBe(2);
1444 - expect(console.error.calls.argsFor(0)[0]).toContain('onClick');
1445 - expect(console.error.calls.argsFor(1)[0]).toContain('onKeyDown');
1443 + expectDev(console.error.calls.count()).toBe(2);
1444 + expectDev(console.error.calls.argsFor(0)[0]).toContain('onClick');
1445 + expectDev(console.error.calls.argsFor(1)[0]).toContain('onKeyDown');
1446 });
1447
1448 it('should warn about class', () => {
1449 spyOn(console, 'error');
1450 ReactDOMServer.renderToString(React.createElement('div', {class: 'muffins'}));
1451 - expect(console.error.calls.count()).toBe(1);
1452 - expect(console.error.calls.argsFor(0)[0]).toContain('className');
1451 + expectDev(console.error.calls.count()).toBe(1);
1452 + expectDev(console.error.calls.argsFor(0)[0]).toContain('className');
1453 });
1454
1455 it('should warn about props that are no longer supported', () => {
1456 spyOn(console, 'error');
1457 ReactTestUtils.renderIntoDocument(<div />);
1458 - expect(console.error.calls.count()).toBe(0);
1458 + expectDev(console.error.calls.count()).toBe(0);
1459
1460 ReactTestUtils.renderIntoDocument(<div onFocusIn={() => {}} />);
1461 - expect(console.error.calls.count()).toBe(1);
1461 + expectDev(console.error.calls.count()).toBe(1);
1462
1463 ReactTestUtils.renderIntoDocument(<div onFocusOut={() => {}} />);
1464 - expect(console.error.calls.count()).toBe(2);
1464 + expectDev(console.error.calls.count()).toBe(2);
1465 });
1466
1467 it('gives source code refs for unknown prop warning', () => {
1468 spyOn(console, 'error');
1469 ReactDOMServer.renderToString(<div class="paladin"/>);
1470 ReactDOMServer.renderToString(<input type="text" onclick="1"/>);
1471 - expect(console.error.calls.count()).toBe(2);
1471 + expectDev(console.error.calls.count()).toBe(2);
1472 expect(
1473 normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])
1474 ).toBe(
@@ -1487,10 +1487,10 @@ describe('ReactDOMComponent', () => {
1487 var container = document.createElement('div');
1488
1489 ReactDOMServer.renderToString(<div className="paladin" />, container);
1490 - expect(console.error.calls.count()).toBe(0);
1490 + expectDev(console.error.calls.count()).toBe(0);
1491
1492 ReactDOMServer.renderToString(<div class="paladin" />, container);
1493 - expect(console.error.calls.count()).toBe(1);
1493 + expectDev(console.error.calls.count()).toBe(1);
1494 expect(
1495 normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])
1496 ).toBe(
@@ -1512,13 +1512,13 @@ describe('ReactDOMComponent', () => {
1512 </div>
1513 );
1514
1515 - expect(console.error.calls.count()).toBe(2);
1515 + expectDev(console.error.calls.count()).toBe(2);
1516
1517 - expect(console.error.calls.argsFor(0)[0]).toContain('className');
1517 + expectDev(console.error.calls.argsFor(0)[0]).toContain('className');
1518 var matches = console.error.calls.argsFor(0)[0].match(/.*\(.*:(\d+)\).*/);
1519 var previousLine = matches[1];
1520
1521 - expect(console.error.calls.argsFor(1)[0]).toContain('onClick');
1521 + expectDev(console.error.calls.argsFor(1)[0]).toContain('onClick');
1522 matches = console.error.calls.argsFor(1)[0].match(/.*\(.*:(\d+)\).*/);
1523 var currentLine = matches[1];
1524
@@ -1563,13 +1563,13 @@ describe('ReactDOMComponent', () => {
1563
1564 ReactDOMServer.renderToString(<Parent />, container);
1565
1566 - expect(console.error.calls.count()).toBe(2);
1566 + expectDev(console.error.calls.count()).toBe(2);
1567
1568 - expect(console.error.calls.argsFor(0)[0]).toContain('className');
1568 + expectDev(console.error.calls.argsFor(0)[0]).toContain('className');
1569 var matches = console.error.calls.argsFor(0)[0].match(/.*\(.*:(\d+)\).*/);
1570 var previousLine = matches[1];
1571
1572 - expect(console.error.calls.argsFor(1)[0]).toContain('onClick');
1572 + expectDev(console.error.calls.argsFor(1)[0]).toContain('onClick');
1573 matches = console.error.calls.argsFor(1)[0].match(/.*\(.*:(\d+)\).*/);
1574 var currentLine = matches[1];
1575
@@ -1584,13 +1584,13 @@ describe('ReactDOMComponent', () => {
1584 ReactTestUtils.renderIntoDocument(React.createElement('label', {for: 'test'}));
1585 ReactTestUtils.renderIntoDocument(React.createElement('input', {type: 'text', autofocus: true}));
1586
1587 - expect(console.error.calls.count()).toBe(2);
1587 + expectDev(console.error.calls.count()).toBe(2);
1588
1589 - expect(console.error.calls.argsFor(0)[0]).toBe(
1589 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
1590 'Warning: Unknown DOM property for. Did you mean htmlFor?\n in label'
1591 );
1592
1593 - expect(console.error.calls.argsFor(1)[0]).toBe(
1593 + expectDev(console.error.calls.argsFor(1)[0]).toBe(
1594 'Warning: Unknown DOM property autofocus. Did you mean autoFocus?\n in input'
1595 );
1596 });
src/renderers/dom/shared/__tests__/ReactDOMInvalidARIAHook-test.js
+7 -7
@@ -30,13 +30,13 @@ describe('ReactDOMInvalidARIAHook', () => {
30 it('should allow valid aria-* props', () => {
31 spyOn(console, 'error');
32 mountComponent({'aria-label': 'Bumble bees'});
33 - expect(console.error.calls.count()).toBe(0);
33 + expectDev(console.error.calls.count()).toBe(0);
34 });
35 it('should warn for one invalid aria-* prop', () => {
36 spyOn(console, 'error');
37 mountComponent({'aria-badprop': 'maybe'});
38 - expect(console.error.calls.count()).toBe(1);
39 - expect(console.error.calls.argsFor(0)[0]).toContain(
38 + expectDev(console.error.calls.count()).toBe(1);
39 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
40 'Warning: Invalid aria prop `aria-badprop` on <div> tag. ' +
41 'For details, see https://fb.me/invalid-aria-prop'
42 );
@@ -49,8 +49,8 @@ describe('ReactDOMInvalidARIAHook', () => {
49 'aria-malprop': 'Turbulent seas',
50 }
51 );
52 - expect(console.error.calls.count()).toBe(1);
53 - expect(console.error.calls.argsFor(0)[0]).toContain(
52 + expectDev(console.error.calls.count()).toBe(1);
53 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
54 'Warning: Invalid aria props `aria-badprop`, `aria-malprop` on <div> ' +
55 'tag. For details, see https://fb.me/invalid-aria-prop'
56 );
@@ -59,8 +59,8 @@ describe('ReactDOMInvalidARIAHook', () => {
59 spyOn(console, 'error');
60 // The valid attribute name is aria-haspopup.
61 mountComponent({'aria-hasPopup': 'true'});
62 - expect(console.error.calls.count()).toBe(1);
63 - expect(console.error.calls.argsFor(0)[0]).toContain(
62 + expectDev(console.error.calls.count()).toBe(1);
63 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
64 'Warning: Unknown ARIA attribute aria-hasPopup. ' +
65 'Did you mean aria-haspopup?'
66 );
src/renderers/dom/shared/syntheticEvents/__tests__/SyntheticEvent-test.js
+14 -14
@@ -87,9 +87,9 @@ describe('SyntheticEvent', () => {
87 expect(syntheticEvent.nativeEvent).toBe(null);
88 expect(syntheticEvent.target).toBe(null);
89 // once for each property accessed
90 - expect(console.error.calls.count()).toBe(3);
90 + expectDev(console.error.calls.count()).toBe(3);
91 // assert the first warning for accessing `type`
92 - expect(console.error.calls.argsFor(0)[0]).toBe(
92 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
93 'Warning: This synthetic event is reused for performance reasons. If ' +
94 'you\'re seeing this, you\'re accessing the property `type` on a ' +
95 'released/nullified synthetic event. This is set to null. If you must ' +
@@ -104,8 +104,8 @@ describe('SyntheticEvent', () => {
104 var syntheticEvent = createEvent({srcElement: target});
105 syntheticEvent.destructor();
106 expect(syntheticEvent.type = 'MouseEvent').toBe('MouseEvent');
107 - expect(console.error.calls.count()).toBe(1);
108 - expect(console.error.calls.argsFor(0)[0]).toBe(
107 + expectDev(console.error.calls.count()).toBe(1);
108 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
109 'Warning: This synthetic event is reused for performance reasons. If ' +
110 'you\'re seeing this, you\'re setting the property `type` on a ' +
111 'released/nullified synthetic event. This is effectively a no-op. If you must ' +
@@ -119,8 +119,8 @@ describe('SyntheticEvent', () => {
119 var syntheticEvent = createEvent({});
120 SyntheticEvent.release(syntheticEvent);
121 syntheticEvent.preventDefault();
122 - expect(console.error.calls.count()).toBe(1);
123 - expect(console.error.calls.argsFor(0)[0]).toBe(
122 + expectDev(console.error.calls.count()).toBe(1);
123 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
124 'Warning: This synthetic event is reused for performance reasons. If ' +
125 'you\'re seeing this, you\'re accessing the method `preventDefault` on a ' +
126 'released/nullified synthetic event. This is a no-op function. If you must ' +
@@ -134,8 +134,8 @@ describe('SyntheticEvent', () => {
134 var syntheticEvent = createEvent({});
135 SyntheticEvent.release(syntheticEvent);
136 syntheticEvent.stopPropagation();
137 - expect(console.error.calls.count()).toBe(1);
138 - expect(console.error.calls.argsFor(0)[0]).toBe(
137 + expectDev(console.error.calls.count()).toBe(1);
138 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
139 'Warning: This synthetic event is reused for performance reasons. If ' +
140 'you\'re seeing this, you\'re accessing the method `stopPropagation` on a ' +
141 'released/nullified synthetic event. This is a no-op function. If you must ' +
@@ -156,13 +156,13 @@ describe('SyntheticEvent', () => {
156 }
157 var instance = ReactDOM.render(<div onClick={assignEvent} />, element);
158 ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance));
159 - expect(console.error.calls.count()).toBe(0);
159 + expectDev(console.error.calls.count()).toBe(0);
160
161 // access a property to cause the warning
162 event.nativeEvent; // eslint-disable-line no-unused-expressions
163
164 - expect(console.error.calls.count()).toBe(1);
165 - expect(console.error.calls.argsFor(0)[0]).toBe(
164 + expectDev(console.error.calls.count()).toBe(1);
165 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
166 'Warning: This synthetic event is reused for performance reasons. If ' +
167 'you\'re seeing this, you\'re accessing the property `nativeEvent` on a ' +
168 'released/nullified synthetic event. This is set to null. If you must ' +
@@ -178,15 +178,15 @@ describe('SyntheticEvent', () => {
178 SyntheticEvent.release(syntheticEvent);
179 expect(syntheticEvent.foo).toBe('bar');
180 if (typeof Proxy === 'function') {
181 - expect(console.error.calls.count()).toBe(1);
182 - expect(console.error.calls.argsFor(0)[0]).toBe(
181 + expectDev(console.error.calls.count()).toBe(1);
182 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
183 'Warning: This synthetic event is reused for performance reasons. If ' +
184 'you\'re seeing this, you\'re adding a new property in the synthetic ' +
185 'event object. The property is never released. ' +
186 'See https://fb.me/react-event-pooling for more information.'
187 );
188 } else {
189 - expect(console.error.calls.count()).toBe(0);
189 + expectDev(console.error.calls.count()).toBe(0);
190 }
191 });
192 });
src/renderers/dom/shared/wrappers/__tests__/ReactDOMInput-test.js
+44 -44
@@ -50,7 +50,7 @@ describe('ReactDOMInput', () => {
50 document.body.appendChild(container);
51
52 var node = ReactDOM.findDOMNode(stub);
53 - expect(console.error.calls.count()).toBe(1);
53 + expectDev(console.error.calls.count()).toBe(1);
54
55 // Simulate a native change event
56 setUntrackedValue(node, 'giraffe');
@@ -593,12 +593,12 @@ describe('ReactDOMInput', () => {
593 ReactTestUtils.renderIntoDocument(
594 <input type="text" value="zoink" readOnly={true} />
595 );
596 - expect(console.error.calls.count()).toBe(0);
596 + expectDev(console.error.calls.count()).toBe(0);
597
598 ReactTestUtils.renderIntoDocument(
599 <input type="text" value="zoink" readOnly={false} />
600 );
601 - expect(console.error.calls.count()).toBe(1);
601 + expectDev(console.error.calls.count()).toBe(1);
602 });
603
604
@@ -617,12 +617,12 @@ describe('ReactDOMInput', () => {
617 ReactTestUtils.renderIntoDocument(
618 <input type="checkbox" checked="false" readOnly={true} />
619 );
620 - expect(console.error.calls.count()).toBe(0);
620 + expectDev(console.error.calls.count()).toBe(0);
621
622 ReactTestUtils.renderIntoDocument(
623 <input type="checkbox" checked="false" readOnly={false} />
624 );
625 - expect(console.error.calls.count()).toBe(1);
625 + expectDev(console.error.calls.count()).toBe(1);
626 });
627
628 it('should update defaultValue to empty string', () => {
@@ -634,21 +634,21 @@ describe('ReactDOMInput', () => {
634
635 it('should warn if value is null', () => {
636 ReactTestUtils.renderIntoDocument(<input type="text" value={null} />);
637 - expect(console.error.calls.argsFor(0)[0]).toContain(
637 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
638 '`value` prop on `input` should not be null. ' +
639 'Consider using the empty string to clear the component or `undefined` ' +
640 'for uncontrolled components.'
641 );
642
643 ReactTestUtils.renderIntoDocument(<input type="text" value={null} />);
644 - expect(console.error.calls.count()).toBe(1);
644 + expectDev(console.error.calls.count()).toBe(1);
645 });
646
647 it('should warn if checked and defaultChecked props are specified', () => {
648 ReactTestUtils.renderIntoDocument(
649 <input type="radio" checked={true} defaultChecked={true} readOnly={true} />
650 );
651 - expect(console.error.calls.argsFor(0)[0]).toContain(
651 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
652 'A component contains an input of type radio with both checked and defaultChecked props. ' +
653 'Input elements must be either controlled or uncontrolled ' +
654 '(specify either the checked prop, or the defaultChecked prop, but not ' +
@@ -660,14 +660,14 @@ describe('ReactDOMInput', () => {
660 ReactTestUtils.renderIntoDocument(
661 <input type="radio" checked={true} defaultChecked={true} readOnly={true} />
662 );
663 - expect(console.error.calls.count()).toBe(1);
663 + expectDev(console.error.calls.count()).toBe(1);
664 });
665
666 it('should warn if value and defaultValue props are specified', () => {
667 ReactTestUtils.renderIntoDocument(
668 <input type="text" value="foo" defaultValue="bar" readOnly={true} />
669 );
670 - expect(console.error.calls.argsFor(0)[0]).toContain(
670 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
671 'A component contains an input of type text with both value and defaultValue props. ' +
672 'Input elements must be either controlled or uncontrolled ' +
673 '(specify either the value prop, or the defaultValue prop, but not ' +
@@ -679,7 +679,7 @@ describe('ReactDOMInput', () => {
679 ReactTestUtils.renderIntoDocument(
680 <input type="text" value="foo" defaultValue="bar" readOnly={true} />
681 );
682 - expect(console.error.calls.count()).toBe(1);
682 + expectDev(console.error.calls.count()).toBe(1);
683 });
684
685 it('should warn if controlled input switches to uncontrolled (value is undefined)', () => {
@@ -687,8 +687,8 @@ describe('ReactDOMInput', () => {
687 var container = document.createElement('div');
688 ReactDOM.render(stub, container);
689 ReactDOM.render(<input type="text" />, container);
690 - expect(console.error.calls.count()).toBe(1);
691 - expect(console.error.calls.argsFor(0)[0]).toContain(
690 + expectDev(console.error.calls.count()).toBe(1);
691 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
692 'A component is changing a controlled input of type text to be uncontrolled. ' +
693 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
694 'Decide between using a controlled or uncontrolled input ' +
@@ -701,8 +701,8 @@ describe('ReactDOMInput', () => {
701 var container = document.createElement('div');
702 ReactDOM.render(stub, container);
703 ReactDOM.render(<input type="text" value={null} />, container);
704 - expect(console.error.calls.count()).toBeGreaterThan(0);
705 - expect(console.error.calls.argsFor(1)[0]).toContain(
704 + expectDev(console.error.calls.count()).toBeGreaterThan(0);
705 + expectDev(console.error.calls.argsFor(1)[0]).toContain(
706 'A component is changing a controlled input of type text to be uncontrolled. ' +
707 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
708 'Decide between using a controlled or uncontrolled input ' +
@@ -715,8 +715,8 @@ describe('ReactDOMInput', () => {
715 var container = document.createElement('div');
716 ReactDOM.render(stub, container);
717 ReactDOM.render(<input type="text" defaultValue="uncontrolled" />, container);
718 - expect(console.error.calls.count()).toBe(1);
719 - expect(console.error.calls.argsFor(0)[0]).toContain(
718 + expectDev(console.error.calls.count()).toBe(1);
719 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
720 'A component is changing a controlled input of type text to be uncontrolled. ' +
721 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
722 'Decide between using a controlled or uncontrolled input ' +
@@ -729,8 +729,8 @@ describe('ReactDOMInput', () => {
729 var container = document.createElement('div');
730 ReactDOM.render(stub, container);
731 ReactDOM.render(<input type="text" value="controlled" />, container);
732 - expect(console.error.calls.count()).toBe(1);
733 - expect(console.error.calls.argsFor(0)[0]).toContain(
732 + expectDev(console.error.calls.count()).toBe(1);
733 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
734 'A component is changing an uncontrolled input of type text to be controlled. ' +
735 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
736 'Decide between using a controlled or uncontrolled input ' +
@@ -743,8 +743,8 @@ describe('ReactDOMInput', () => {
743 var container = document.createElement('div');
744 ReactDOM.render(stub, container);
745 ReactDOM.render(<input type="text" value="controlled" />, container);
746 - expect(console.error.calls.count()).toBeGreaterThan(0);
747 - expect(console.error.calls.argsFor(1)[0]).toContain(
746 + expectDev(console.error.calls.count()).toBeGreaterThan(0);
747 + expectDev(console.error.calls.argsFor(1)[0]).toContain(
748 'A component is changing an uncontrolled input of type text to be controlled. ' +
749 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
750 'Decide between using a controlled or uncontrolled input ' +
@@ -757,8 +757,8 @@ describe('ReactDOMInput', () => {
757 var container = document.createElement('div');
758 ReactDOM.render(stub, container);
759 ReactDOM.render(<input type="checkbox" />, container);
760 - expect(console.error.calls.count()).toBe(1);
761 - expect(console.error.calls.argsFor(0)[0]).toContain(
760 + expectDev(console.error.calls.count()).toBe(1);
761 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
762 'A component is changing a controlled input of type checkbox to be uncontrolled. ' +
763 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
764 'Decide between using a controlled or uncontrolled input ' +
@@ -771,8 +771,8 @@ describe('ReactDOMInput', () => {
771 var container = document.createElement('div');
772 ReactDOM.render(stub, container);
773 ReactDOM.render(<input type="checkbox" checked={null} />, container);
774 - expect(console.error.calls.count()).toBe(1);
775 - expect(console.error.calls.argsFor(0)[0]).toContain(
774 + expectDev(console.error.calls.count()).toBe(1);
775 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
776 'A component is changing a controlled input of type checkbox to be uncontrolled. ' +
777 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
778 'Decide between using a controlled or uncontrolled input ' +
@@ -785,8 +785,8 @@ describe('ReactDOMInput', () => {
785 var container = document.createElement('div');
786 ReactDOM.render(stub, container);
787 ReactDOM.render(<input type="checkbox" defaultChecked={true} />, container);
788 - expect(console.error.calls.count()).toBe(1);
789 - expect(console.error.calls.argsFor(0)[0]).toContain(
788 + expectDev(console.error.calls.count()).toBe(1);
789 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
790 'A component is changing a controlled input of type checkbox to be uncontrolled. ' +
791 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
792 'Decide between using a controlled or uncontrolled input ' +
@@ -799,8 +799,8 @@ describe('ReactDOMInput', () => {
799 var container = document.createElement('div');
800 ReactDOM.render(stub, container);
801 ReactDOM.render(<input type="checkbox" checked={true} />, container);
802 - expect(console.error.calls.count()).toBe(1);
803 - expect(console.error.calls.argsFor(0)[0]).toContain(
802 + expectDev(console.error.calls.count()).toBe(1);
803 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
804 'A component is changing an uncontrolled input of type checkbox to be controlled. ' +
805 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
806 'Decide between using a controlled or uncontrolled input ' +
@@ -813,8 +813,8 @@ describe('ReactDOMInput', () => {
813 var container = document.createElement('div');
814 ReactDOM.render(stub, container);
815 ReactDOM.render(<input type="checkbox" checked={true} />, container);
816 - expect(console.error.calls.count()).toBe(1);
817 - expect(console.error.calls.argsFor(0)[0]).toContain(
816 + expectDev(console.error.calls.count()).toBe(1);
817 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
818 'A component is changing an uncontrolled input of type checkbox to be controlled. ' +
819 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
820 'Decide between using a controlled or uncontrolled input ' +
@@ -827,8 +827,8 @@ describe('ReactDOMInput', () => {
827 var container = document.createElement('div');
828 ReactDOM.render(stub, container);
829 ReactDOM.render(<input type="radio" />, container);
830 - expect(console.error.calls.count()).toBe(1);
831 - expect(console.error.calls.argsFor(0)[0]).toContain(
830 + expectDev(console.error.calls.count()).toBe(1);
831 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
832 'A component is changing a controlled input of type radio to be uncontrolled. ' +
833 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
834 'Decide between using a controlled or uncontrolled input ' +
@@ -841,8 +841,8 @@ describe('ReactDOMInput', () => {
841 var container = document.createElement('div');
842 ReactDOM.render(stub, container);
843 ReactDOM.render(<input type="radio" checked={null} />, container);
844 - expect(console.error.calls.count()).toBe(1);
845 - expect(console.error.calls.argsFor(0)[0]).toContain(
844 + expectDev(console.error.calls.count()).toBe(1);
845 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
846 'A component is changing a controlled input of type radio to be uncontrolled. ' +
847 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
848 'Decide between using a controlled or uncontrolled input ' +
@@ -855,8 +855,8 @@ describe('ReactDOMInput', () => {
855 var container = document.createElement('div');
856 ReactDOM.render(stub, container);
857 ReactDOM.render(<input type="radio" defaultChecked={true} />, container);
858 - expect(console.error.calls.count()).toBe(1);
859 - expect(console.error.calls.argsFor(0)[0]).toContain(
858 + expectDev(console.error.calls.count()).toBe(1);
859 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
860 'A component is changing a controlled input of type radio to be uncontrolled. ' +
861 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
862 'Decide between using a controlled or uncontrolled input ' +
@@ -869,8 +869,8 @@ describe('ReactDOMInput', () => {
869 var container = document.createElement('div');
870 ReactDOM.render(stub, container);
871 ReactDOM.render(<input type="radio" checked={true} />, container);
872 - expect(console.error.calls.count()).toBe(1);
873 - expect(console.error.calls.argsFor(0)[0]).toContain(
872 + expectDev(console.error.calls.count()).toBe(1);
873 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
874 'A component is changing an uncontrolled input of type radio to be controlled. ' +
875 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
876 'Decide between using a controlled or uncontrolled input ' +
@@ -883,8 +883,8 @@ describe('ReactDOMInput', () => {
883 var container = document.createElement('div');
884 ReactDOM.render(stub, container);
885 ReactDOM.render(<input type="radio" checked={true} />, container);
886 - expect(console.error.calls.count()).toBe(1);
887 - expect(console.error.calls.argsFor(0)[0]).toContain(
886 + expectDev(console.error.calls.count()).toBe(1);
887 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
888 'A component is changing an uncontrolled input of type radio to be controlled. ' +
889 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' +
890 'Decide between using a controlled or uncontrolled input ' +
@@ -899,7 +899,7 @@ describe('ReactDOMInput', () => {
899 ReactDOM.render(<input type="radio" value="value" defaultChecked={true} />, container);
900 ReactDOM.render(<input type="radio" value="value" onChange={() => null} />, container);
901 ReactDOM.render(<input type="radio" />, container);
902 - expect(console.error.calls.count()).toBe(0);
902 + expectDev(console.error.calls.count()).toBe(0);
903 });
904
905 it('should not warn if radio value changes but never becomes uncontrolled', () => {
@@ -913,14 +913,14 @@ describe('ReactDOMInput', () => {
913 checked={false}
914 onChange={() => null}
915 />, container);
916 - expect(console.error.calls.count()).toBe(0);
916 + expectDev(console.error.calls.count()).toBe(0);
917 });
918
919 it('should warn if radio checked false changes to become uncontrolled', () => {
920 var container = document.createElement('div');
921 ReactDOM.render(<input type="radio" value="value" checked={false} onChange={() => null} />, container);
922 ReactDOM.render(<input type="radio" value="value" />, container);
923 - expect(console.error.calls.argsFor(0)[0]).toContain(
923 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
924 'A component is changing a controlled input of type radio to be uncontrolled. ' +
925 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
926 'Decide between using a controlled or uncontrolled input ' +
src/renderers/dom/shared/wrappers/__tests__/ReactDOMOption-test.js
+3 -3
@@ -39,8 +39,8 @@ describe('ReactDOMOption', () => {
39 expect(node.innerHTML).toBe('1 2');
40 ReactTestUtils.renderIntoDocument(<option>{1} <div /> {2}</option>);
41 // only warn once
42 - expect(console.error.calls.count()).toBe(1);
43 - expect(console.error.calls.argsFor(0)[0]).toContain('Only strings and numbers are supported as <option> children.');
42 + expectDev(console.error.calls.count()).toBe(1);
43 + expectDev(console.error.calls.argsFor(0)[0]).toContain('Only strings and numbers are supported as <option> children.');
44 });
45
46 it('should ignore null/undefined/false children without warning', () => {
@@ -50,7 +50,7 @@ describe('ReactDOMOption', () => {
50
51 var node = ReactDOM.findDOMNode(stub);
52
53 - expect(console.error.calls.count()).toBe(0);
53 + expectDev(console.error.calls.count()).toBe(0);
54 expect(node.innerHTML).toBe('1 2');
55 });
56
src/renderers/dom/shared/wrappers/__tests__/ReactDOMSelect-test.js
+4 -4
@@ -430,14 +430,14 @@ describe('ReactDOMSelect', () => {
430 spyOn(console, 'error');
431
432 ReactTestUtils.renderIntoDocument(<select value={null}><option value="test"/></select>);
433 - expect(console.error.calls.argsFor(0)[0]).toContain(
433 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
434 '`value` prop on `select` should not be null. ' +
435 'Consider using the empty string to clear the component or `undefined` ' +
436 'for uncontrolled components.'
437 );
438
439 ReactTestUtils.renderIntoDocument(<select value={null}><option value="test"/></select>);
440 - expect(console.error.calls.count()).toBe(1);
440 + expectDev(console.error.calls.count()).toBe(1);
441 });
442
443 it('should refresh state on change', () => {
@@ -464,7 +464,7 @@ describe('ReactDOMSelect', () => {
464 <option value="gorilla">A gorilla!</option>
465 </select>
466 );
467 - expect(console.error.calls.argsFor(0)[0]).toContain(
467 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
468 'Select elements must be either controlled or uncontrolled ' +
469 '(specify either the value prop, or the defaultValue prop, but not ' +
470 'both). Decide between using a controlled or uncontrolled select ' +
@@ -479,7 +479,7 @@ describe('ReactDOMSelect', () => {
479 <option value="gorilla">A gorilla!</option>
480 </select>
481 );
482 - expect(console.error.calls.count()).toBe(1);
482 + expectDev(console.error.calls.count()).toBe(1);
483 });
484
485 it('should be able to safely remove select onChange', () => {
src/renderers/dom/shared/wrappers/__tests__/ReactDOMTextarea-test.js
+10 -10
@@ -255,7 +255,7 @@ describe('ReactDOMTextarea', () => {
255 var stub = <textarea>giraffe</textarea>;
256 var node = renderTextarea(stub, container);
257
258 - expect(console.error.calls.count()).toBe(1);
258 + expectDev(console.error.calls.count()).toBe(1);
259 expect(node.value).toBe('giraffe');
260
261 // Changing children should do nothing, it functions like `defaultValue`.
@@ -294,14 +294,14 @@ describe('ReactDOMTextarea', () => {
294 it('should allow numbers as children', () => {
295 spyOn(console, 'error');
296 var node = renderTextarea(<textarea>{17}</textarea>);
297 - expect(console.error.calls.count()).toBe(1);
297 + expectDev(console.error.calls.count()).toBe(1);
298 expect(node.value).toBe('17');
299 });
300
301 it('should allow booleans as children', () => {
302 spyOn(console, 'error');
303 var node = renderTextarea(<textarea>{false}</textarea>);
304 - expect(console.error.calls.count()).toBe(1);
304 + expectDev(console.error.calls.count()).toBe(1);
305 expect(node.value).toBe('false');
306 });
307
@@ -313,7 +313,7 @@ describe('ReactDOMTextarea', () => {
313 },
314 };
315 var node = renderTextarea(<textarea>{obj}</textarea>);
316 - expect(console.error.calls.count()).toBe(1);
316 + expectDev(console.error.calls.count()).toBe(1);
317 expect(node.value).toBe('sharkswithlasers');
318 });
319
@@ -326,7 +326,7 @@ describe('ReactDOMTextarea', () => {
326 );
327 }).toThrow();
328
329 - expect(console.error.calls.count()).toBe(1);
329 + expectDev(console.error.calls.count()).toBe(1);
330
331 var node;
332 expect(function() {
@@ -335,7 +335,7 @@ describe('ReactDOMTextarea', () => {
335
336 expect(node.value).toBe('[object Object]');
337
338 - expect(console.error.calls.count()).toBe(2);
338 + expectDev(console.error.calls.count()).toBe(2);
339 });
340
341 it('should unmount', () => {
@@ -348,14 +348,14 @@ describe('ReactDOMTextarea', () => {
348 spyOn(console, 'error');
349
350 ReactTestUtils.renderIntoDocument(<textarea value={null} />);
351 - expect(console.error.calls.argsFor(0)[0]).toContain(
351 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
352 '`value` prop on `textarea` should not be null. ' +
353 'Consider using the empty string to clear the component or `undefined` ' +
354 'for uncontrolled components.'
355 );
356
357 ReactTestUtils.renderIntoDocument(<textarea value={null} />);
358 - expect(console.error.calls.count()).toBe(1);
358 + expectDev(console.error.calls.count()).toBe(1);
359 });
360
361 it('should warn if value and defaultValue are specified', () => {
@@ -363,7 +363,7 @@ describe('ReactDOMTextarea', () => {
363 ReactTestUtils.renderIntoDocument(
364 <textarea value="foo" defaultValue="bar" readOnly={true} />
365 );
366 - expect(console.error.calls.argsFor(0)[0]).toContain(
366 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
367 'Textarea elements must be either controlled or uncontrolled ' +
368 '(specify either the value prop, or the defaultValue prop, but not ' +
369 'both). Decide between using a controlled or uncontrolled textarea ' +
@@ -374,7 +374,7 @@ describe('ReactDOMTextarea', () => {
374 ReactTestUtils.renderIntoDocument(
375 <textarea value="foo" defaultValue="bar" readOnly={true} />
376 );
377 - expect(console.error.calls.count()).toBe(1);
377 + expectDev(console.error.calls.count()).toBe(1);
378 });
379
380 });
src/renderers/dom/stack/client/__tests__/ReactDOM-test.js
+1 -1
@@ -115,7 +115,7 @@ describe('ReactDOM', () => {
115 spyOn(console, 'error');
116 var element = React.DOM.div();
117 expect(element.type).toBe('div');
118 - expect(console.error.calls.count()).toBe(0);
118 + expectDev(console.error.calls.count()).toBe(0);
119 });
120
121 it('throws in render() if the mount callback is not a function', () => {
src/renderers/dom/stack/client/__tests__/ReactMount-test.js
+12 -12
@@ -134,12 +134,12 @@ describe('ReactMount', () => {
134
135 spyOn(console, 'error');
136 ReactMount.render(<div />, container);
137 - expect(console.error.calls.count()).toBe(1);
137 + expectDev(console.error.calls.count()).toBe(1);
138
139 container.innerHTML = ' ' + ReactDOMServer.renderToString(<div />);
140
141 ReactMount.render(<div />, container);
142 - expect(console.error.calls.count()).toBe(2);
142 + expectDev(console.error.calls.count()).toBe(2);
143 });
144
145 it('should not warn if mounting into non-empty node', () => {
@@ -148,7 +148,7 @@ describe('ReactMount', () => {
148
149 spyOn(console, 'error');
150 ReactMount.render(<div />, container);
151 - expect(console.error.calls.count()).toBe(0);
151 + expectDev(console.error.calls.count()).toBe(0);
152 });
153
154 it('should warn when mounting into document.body', () => {
@@ -158,8 +158,8 @@ describe('ReactMount', () => {
158
159 ReactMount.render(<div />, iFrame.contentDocument.body);
160
161 - expect(console.error.calls.count()).toBe(1);
162 - expect(console.error.calls.argsFor(0)[0]).toContain(
161 + expectDev(console.error.calls.count()).toBe(1);
162 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
163 'Rendering components directly into document.body is discouraged'
164 );
165 });
@@ -175,8 +175,8 @@ describe('ReactMount', () => {
175 <div>This markup contains an nbsp entity: &nbsp; client text</div>,
176 div
177 );
178 - expect(console.error.calls.count()).toBe(1);
179 - expect(console.error.calls.argsFor(0)[0]).toContain(
178 + expectDev(console.error.calls.count()).toBe(1);
179 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
180 ' (client) nbsp entity: &nbsp; client text</div>\n' +
181 ' (server) nbsp entity: &nbsp; server text</div>'
182 );
@@ -220,8 +220,8 @@ describe('ReactMount', () => {
220 spyOn(console, 'error');
221 var rootNode = container.firstChild;
222 ReactDOM.render(<span />, rootNode);
223 - expect(console.error.calls.count()).toBe(1);
224 - expect(console.error.calls.argsFor(0)[0]).toBe(
223 + expectDev(console.error.calls.count()).toBe(1);
224 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
225 'Warning: render(...): Replacing React-rendered children with a new ' +
226 'root component. If you intended to update the children of this node, ' +
227 'you should instead have the existing children update their state and ' +
@@ -246,15 +246,15 @@ describe('ReactMount', () => {
246
247 spyOn(console, 'error');
248 ReactDOMOther.unmountComponentAtNode(container);
249 - expect(console.error.calls.count()).toBe(1);
250 - expect(console.error.calls.argsFor(0)[0]).toBe(
249 + expectDev(console.error.calls.count()).toBe(1);
250 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
251 'Warning: unmountComponentAtNode(): The node you\'re attempting to unmount ' +
252 'was rendered by another copy of React.'
253 );
254
255 // Don't throw a warning if the correct React copy unmounts the node
256 ReactDOM.unmountComponentAtNode(container);
257 - expect(console.error.calls.count()).toBe(1);
257 + expectDev(console.error.calls.count()).toBe(1);
258 });
259
260 it('passes the correct callback context', () => {
src/renderers/dom/stack/client/__tests__/ReactMountDestruction-test.js
+4 -4
@@ -53,8 +53,8 @@ describe('ReactMount', () => {
53 var rootDiv = mainContainerDiv.firstChild;
54 spyOn(console, 'error');
55 ReactDOM.unmountComponentAtNode(rootDiv);
56 - expect(console.error.calls.count()).toBe(1);
57 - expect(console.error.calls.argsFor(0)[0]).toBe(
56 + expectDev(console.error.calls.count()).toBe(1);
57 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
58 'Warning: unmountComponentAtNode(): The node you\'re attempting to ' +
59 'unmount was rendered by React and is not a top-level container. You ' +
60 'may have accidentally passed in a React root node instead of its ' +
@@ -77,8 +77,8 @@ describe('ReactMount', () => {
77 var nonRootDiv = mainContainerDiv.firstChild.firstChild;
78 spyOn(console, 'error');
79 ReactDOM.unmountComponentAtNode(nonRootDiv);
80 - expect(console.error.calls.count()).toBe(1);
81 - expect(console.error.calls.argsFor(0)[0]).toBe(
80 + expectDev(console.error.calls.count()).toBe(1);
81 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
82 'Warning: unmountComponentAtNode(): The node you\'re attempting to ' +
83 'unmount was rendered by React and is not a top-level container. ' +
84 'Instead, have the parent component update its state and rerender in ' +
src/renderers/dom/stack/server/__tests__/ReactServerRendering-test.js
+7 -7
@@ -265,7 +265,7 @@ describe('ReactServerRendering', () => {
265 spyOn(console, 'error');
266 instance = ReactDOM.render(<TestComponent name="y" />, element);
267 expect(mountCount).toEqual(4);
268 - expect(console.error.calls.count()).toBe(1);
268 + expectDev(console.error.calls.count()).toBe(1);
269 expect(element.innerHTML.length > 0).toBe(true);
270 expect(element.innerHTML).not.toEqual(lastMarkup);
271
@@ -476,8 +476,8 @@ describe('ReactServerRendering', () => {
476 spyOn(console, 'error');
477 ReactServerRendering.renderToString(<Foo />);
478 jest.runOnlyPendingTimers();
479 - expect(console.error.calls.count()).toBe(1);
480 - expect(console.error.calls.mostRecent().args[0]).toBe(
479 + expectDev(console.error.calls.count()).toBe(1);
480 + expectDev(console.error.calls.mostRecent().args[0]).toBe(
481 'Warning: setState(...): Can only update a mounting component.' +
482 ' This usually means you called setState() outside componentWillMount() on the server.' +
483 ' This is a no-op. Please check the code for the Foo component.'
@@ -502,8 +502,8 @@ describe('ReactServerRendering', () => {
502 spyOn(console, 'error');
503 ReactServerRendering.renderToString(<Bar />);
504 jest.runOnlyPendingTimers();
505 - expect(console.error.calls.count()).toBe(1);
506 - expect(console.error.calls.mostRecent().args[0]).toBe(
505 + expectDev(console.error.calls.count()).toBe(1);
506 + expectDev(console.error.calls.mostRecent().args[0]).toBe(
507 'Warning: replaceState(...): Can only update a mounting component. ' +
508 'This usually means you called replaceState() outside componentWillMount() on the server. ' +
509 'This is a no-op. Please check the code for the Bar component.'
@@ -529,8 +529,8 @@ describe('ReactServerRendering', () => {
529 spyOn(console, 'error');
530 ReactServerRendering.renderToString(<Baz />);
531 jest.runOnlyPendingTimers();
532 - expect(console.error.calls.count()).toBe(1);
533 - expect(console.error.calls.mostRecent().args[0]).toBe(
532 + expectDev(console.error.calls.count()).toBe(1);
533 + expectDev(console.error.calls.mostRecent().args[0]).toBe(
534 'Warning: forceUpdate(...): Can only update a mounting component. ' +
535 'This usually means you called forceUpdate() outside componentWillMount() on the server. ' +
536 'This is a no-op. Please check the code for the Baz component.'
src/renderers/shared/__tests__/ReactDebugTool-test.js
+3 -3
@@ -63,14 +63,14 @@ describe('ReactDebugTool', () => {
63 });
64
65 ReactDebugTool.onTestEvent();
66 - expect(console.error.calls.count()).toBe(1);
67 - expect(console.error.calls.argsFor(0)[0]).toContain(
66 + expectDev(console.error.calls.count()).toBe(1);
67 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
68 'Exception thrown by hook while handling ' +
69 'onTestEvent: Error: Hi.'
70 );
71
72 ReactDebugTool.onTestEvent();
73 - expect(console.error.calls.count()).toBe(1);
73 + expectDev(console.error.calls.count()).toBe(1);
74 });
75
76 it('returns isProfiling state', () => {
src/renderers/shared/__tests__/ReactPerf-test.js
+7 -7
@@ -389,28 +389,28 @@ describe('ReactPerf', () => {
389 var measurements = measure(() => {});
390 spyOn(console, 'error');
391 ReactPerf.getMeasurementsSummaryMap(measurements);
392 - expect(console.error.calls.count()).toBe(1);
393 - expect(console.error.calls.argsFor(0)[0]).toContain(
392 + expectDev(console.error.calls.count()).toBe(1);
393 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
394 '`ReactPerf.getMeasurementsSummaryMap(...)` is deprecated. Use ' +
395 '`ReactPerf.getWasted(...)` instead.'
396 );
397
398 ReactPerf.getMeasurementsSummaryMap(measurements);
399 - expect(console.error.calls.count()).toBe(1);
399 + expectDev(console.error.calls.count()).toBe(1);
400 });
401
402 it('warns once when using printDOM', () => {
403 var measurements = measure(() => {});
404 spyOn(console, 'error');
405 ReactPerf.printDOM(measurements);
406 - expect(console.error.calls.count()).toBe(1);
407 - expect(console.error.calls.argsFor(0)[0]).toContain(
406 + expectDev(console.error.calls.count()).toBe(1);
407 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
408 '`ReactPerf.printDOM(...)` is deprecated. Use ' +
409 '`ReactPerf.printOperations(...)` instead.'
410 );
411
412 ReactPerf.printDOM(measurements);
413 - expect(console.error.calls.count()).toBe(1);
413 + expectDev(console.error.calls.count()).toBe(1);
414 });
415
416 it('returns isRunning state', () => {
@@ -464,7 +464,7 @@ describe('ReactPerf', () => {
464 expect(ReactPerf.stop()).toBe(undefined);
465 expect(ReactPerf.isRunning()).toBe(false);
466
467 - expect(console.error.calls.count()).toBe(1);
467 + expectDev(console.error.calls.count()).toBe(1);
468
469 __DEV__ = true;
470 });
src/renderers/shared/hooks/__tests__/ReactComponentTreeHook-test.js
+2 -2
@@ -1830,8 +1830,8 @@ describe('ReactComponentTreeHook', () => {
1830
1831 spyOn(console, 'error');
1832 getAddendum(-17);
1833 - expect(console.error.calls.count()).toBe(1);
1834 - expect(console.error.calls.argsFor(0)[0]).toBe(
1833 + expectDev(console.error.calls.count()).toBe(1);
1834 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
1835 'Warning: ReactComponentTreeHook: Missing React element for ' +
1836 'debugID -17 when building stack'
1837 );
src/renderers/shared/stack/reconciler/__tests__/ReactComponent-test.js
+1 -1
@@ -348,7 +348,7 @@ describe('ReactComponent', () => {
348 );
349
350 // One warning for each element creation
351 - expect(console.error.calls.count()).toBe(2);
351 + expectDev(console.error.calls.count()).toBe(2);
352 });
353
354 });
src/renderers/shared/stack/reconciler/__tests__/ReactComponentLifeCycle-test.js
+8 -8
@@ -234,8 +234,8 @@ describe('ReactComponentLifeCycle', () => {
234 }
235
236 ReactTestUtils.renderIntoDocument(<StatefulComponent />);
237 - expect(console.error.calls.count()).toBe(1);
238 - expect(console.error.calls.argsFor(0)[0]).toBe(
237 + expectDev(console.error.calls.count()).toBe(1);
238 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
239 'Warning: setState(...): Can only update a mounted or ' +
240 'mounting component. This usually means you called setState() on an ' +
241 'unmounted component. This is a no-op. Please check the code for the ' +
@@ -263,8 +263,8 @@ describe('ReactComponentLifeCycle', () => {
263 var instance = ReactTestUtils.renderIntoDocument(element);
264 expect(instance.isMounted()).toBeTruthy();
265
266 - expect(console.error.calls.count()).toBe(1);
267 - expect(console.error.calls.argsFor(0)[0]).toContain(
266 + expectDev(console.error.calls.count()).toBe(1);
267 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
268 'Component is accessing isMounted inside its render()'
269 );
270 });
@@ -289,8 +289,8 @@ describe('ReactComponentLifeCycle', () => {
289 var instance = ReactTestUtils.renderIntoDocument(element);
290 expect(instance.isMounted()).toBeTruthy();
291
292 - expect(console.error.calls.count()).toBe(1);
293 - expect(console.error.calls.argsFor(0)[0]).toContain(
292 + expectDev(console.error.calls.count()).toBe(1);
293 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
294 'Component is accessing isMounted inside its render()'
295 );
296 });
@@ -330,8 +330,8 @@ describe('ReactComponentLifeCycle', () => {
330 });
331
332 ReactTestUtils.renderIntoDocument(<Component />);
333 - expect(console.error.calls.count()).toBe(1);
334 - expect(console.error.calls.argsFor(0)[0]).toContain(
333 + expectDev(console.error.calls.count()).toBe(1);
334 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
335 'Component is accessing findDOMNode inside its render()'
336 );
337 });
src/renderers/shared/stack/reconciler/__tests__/ReactCompositeComponent-test.js
+23 -23
@@ -184,11 +184,11 @@ describe('ReactCompositeComponent', () => {
184 mountedInstance.methodAutoBound();
185 }).not.toThrow();
186
187 - expect(console.error.calls.count()).toBe(1);
187 + expectDev(console.error.calls.count()).toBe(1);
188 var explicitlyBound = mountedInstance.methodToBeExplicitlyBound.bind(
189 mountedInstance
190 );
191 - expect(console.error.calls.count()).toBe(2);
191 + expectDev(console.error.calls.count()).toBe(2);
192 var autoBound = mountedInstance.methodAutoBound;
193
194 var context = {};
@@ -269,13 +269,13 @@ describe('ReactCompositeComponent', () => {
269 instance = ReactDOM.render(instance, container);
270 instance.forceUpdate();
271
272 - expect(console.error.calls.count()).toBe(0);
272 + expectDev(console.error.calls.count()).toBe(0);
273
274 ReactDOM.unmountComponentAtNode(container);
275
276 instance.forceUpdate();
277 - expect(console.error.calls.count()).toBe(1);
278 - expect(console.error.calls.argsFor(0)[0]).toBe(
277 + expectDev(console.error.calls.count()).toBe(1);
278 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
279 'Warning: forceUpdate(...): Can only update a mounted or ' +
280 'mounting component. This usually means you called forceUpdate() on an ' +
281 'unmounted component. This is a no-op. Please check the code for the ' +
@@ -309,7 +309,7 @@ describe('ReactCompositeComponent', () => {
309
310 instance.setState({value: 1});
311
312 - expect(console.error.calls.count()).toBe(0);
312 + expectDev(console.error.calls.count()).toBe(0);
313
314 expect(renders).toBe(2);
315
@@ -318,8 +318,8 @@ describe('ReactCompositeComponent', () => {
318
319 expect(renders).toBe(2);
320
321 - expect(console.error.calls.count()).toBe(1);
322 - expect(console.error.calls.argsFor(0)[0]).toBe(
321 + expectDev(console.error.calls.count()).toBe(1);
322 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
323 'Warning: setState(...): Can only update a mounted or ' +
324 'mounting component. This usually means you called setState() on an ' +
325 'unmounted component. This is a no-op. Please check the code for the ' +
@@ -377,12 +377,12 @@ describe('ReactCompositeComponent', () => {
377 }
378 }
379
380 - expect(console.error.calls.count()).toBe(0);
380 + expectDev(console.error.calls.count()).toBe(0);
381
382 var instance = ReactDOM.render(<Component />, container);
383
384 - expect(console.error.calls.count()).toBe(1);
385 - expect(console.error.calls.argsFor(0)[0]).toBe(
384 + expectDev(console.error.calls.count()).toBe(1);
385 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
386 'Warning: setState(...): Cannot update during an existing state ' +
387 'transition (such as within `render` or another component\'s ' +
388 'constructor). Render methods should be a pure function of props and ' +
@@ -426,12 +426,12 @@ describe('ReactCompositeComponent', () => {
426 }
427 }
428
429 - expect(console.error.calls.count()).toBe(0);
429 + expectDev(console.error.calls.count()).toBe(0);
430 var instance = ReactDOM.render(<Component />, container);
431 expect(renderPasses).toBe(2);
432 expect(instance.state.value).toBe(1);
433 - expect(console.error.calls.count()).toBe(1);
434 - expect(console.error.calls.argsFor(0)[0]).toBe(
433 + expectDev(console.error.calls.count()).toBe(1);
434 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
435 'Warning: setState(...): Cannot call setState() inside getChildContext()'
436 );
437 });
@@ -502,8 +502,8 @@ describe('ReactCompositeComponent', () => {
502 var instance = ReactTestUtils.renderIntoDocument(<Component />);
503 instance.setState({bogus: true});
504
505 - expect(console.error.calls.count()).toBe(1);
506 - expect(console.error.calls.argsFor(0)[0]).toBe(
505 + expectDev(console.error.calls.count()).toBe(1);
506 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
507 'Warning: Component.shouldComponentUpdate(): Returned undefined instead of a ' +
508 'boolean value. Make sure to return true or false.'
509 );
@@ -523,8 +523,8 @@ describe('ReactCompositeComponent', () => {
523
524 ReactTestUtils.renderIntoDocument(<Component />);
525
526 - expect(console.error.calls.count()).toBe(1);
527 - expect(console.error.calls.argsFor(0)[0]).toBe(
526 + expectDev(console.error.calls.count()).toBe(1);
527 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
528 'Warning: Component has a method called ' +
529 'componentDidUnmount(). But there is no such lifecycle method. ' +
530 'Did you mean componentWillUnmount()?'
@@ -1022,8 +1022,8 @@ describe('ReactCompositeComponent', () => {
1022 }
1023
1024 ReactTestUtils.renderIntoDocument(<Outer />);
1025 - expect(console.error.calls.count()).toBe(1);
1026 - expect(console.error.calls.argsFor(0)[0]).toBe(
1025 + expectDev(console.error.calls.count()).toBe(1);
1026 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
1027 'Warning: _renderNewRootComponent(): Render methods should ' +
1028 'be a pure function of props and state; triggering nested component ' +
1029 'updates from render is not allowed. If necessary, trigger nested ' +
@@ -1267,12 +1267,12 @@ describe('ReactCompositeComponent', () => {
1267 }
1268 }
1269
1270 - expect(console.error.calls.count()).toBe(0);
1270 + expectDev(console.error.calls.count()).toBe(0);
1271
1272 ReactDOM.render(<Foo idx="qwe" />, container);
1273
1274 - expect(console.error.calls.count()).toBe(1);
1275 - expect(console.error.calls.argsFor(0)[0]).toContain(
1274 + expectDev(console.error.calls.count()).toBe(1);
1275 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
1276 'Foo(...): When calling super() in `Foo`, make sure to pass ' +
1277 'up the same props that your component\'s constructor was passed.'
1278 );
src/renderers/shared/stack/reconciler/__tests__/ReactMockedComponent-test.js
+1 -1
@@ -32,7 +32,7 @@ describe('ReactMockedComponent', () => {
32 it('should allow an implicitly mocked component to be rendered without warnings', () => {
33 spyOn(console, 'error');
34 ReactTestUtils.renderIntoDocument(<AutoMockedComponent />);
35 - expect(console.error.calls.count()).toBe(0);
35 + expectDev(console.error.calls.count()).toBe(0);
36 });
37
38 it('should allow an implicitly mocked component to be updated', () => {
src/renderers/shared/stack/reconciler/__tests__/ReactMultiChild-test.js
+3 -3
@@ -13,7 +13,7 @@
13
14 describe('ReactMultiChild', () => {
15 function normalizeCodeLocInfo(str) {
16 - return str.replace(/\(at .+?:\d+\)/g, '(at **)');
16 + return str && str.replace(/\(at .+?:\d+\)/g, '(at **)');
17 }
18
19 var React;
@@ -185,8 +185,8 @@ describe('ReactMultiChild', () => {
185 container
186 );
187
188 - expect(console.error.calls.count()).toBe(1);
189 - expect(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
188 + expectDev(console.error.calls.count()).toBe(1);
189 + expectDev(normalizeCodeLocInfo(console.error.calls.argsFor(0)[0])).toBe(
190 'Warning: flattenChildren(...): ' +
191 'Encountered two children with the same key, `1`. ' +
192 'Child keys must be unique; when two children share a key, ' +
src/renderers/shared/stack/reconciler/__tests__/ReactMultiChildText-test.js
+3 -3
@@ -183,8 +183,8 @@ describe('ReactMultiChildText', () => {
183 [true, <div>{1.2}{''}{<div />}{'foo'}</div>, true, 1.2], [<div />, '1.2'],
184 ['', 'foo', <div>{true}{<div />}{1.2}{''}</div>, 'foo'], ['', 'foo', <div />, 'foo'],
185 ]);
186 - expect(console.error.calls.count()).toBe(1);
187 - expect(console.error.calls.argsFor(0)[0]).toContain(
186 + expectDev(console.error.calls.count()).toBe(1);
187 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
188 'Warning: Each child in an array or iterator should have a unique "key" prop.'
189 );
190 });
@@ -244,6 +244,6 @@ describe('ReactMultiChildText', () => {
244 expect(childNodes[5]).toBe(alpha3);
245
246 // Using Maps as children gives a single warning
247 - expect(console.error.calls.count()).toBe(1);
247 + expectDev(console.error.calls.count()).toBe(1);
248 });
249 });
src/renderers/shared/stack/reconciler/__tests__/ReactStatelessComponent-test.js
+12 -12
@@ -112,8 +112,8 @@ describe('ReactStatelessComponent', () => {
112
113 ReactDOM.render(<StatelessComponentWithChildContext name="A" />, container);
114
115 - expect(console.error.calls.count()).toBe(1);
116 - expect(console.error.calls.argsFor(0)[0]).toContain(
115 + expectDev(console.error.calls.count()).toBe(1);
116 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
117 'StatelessComponentWithChildContext(...): childContextTypes cannot ' +
118 'be defined on a functional component.'
119 );
@@ -127,8 +127,8 @@ describe('ReactStatelessComponent', () => {
127 expect(function() {
128 ReactTestUtils.renderIntoDocument(<div><NotAComponent /></div>);
129 }).toThrow();
130 - expect(console.error.calls.count()).toBe(1);
131 - expect(console.error.calls.argsFor(0)[0]).toContain(
130 + expectDev(console.error.calls.count()).toBe(1);
131 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
132 'NotAComponent(...): A valid React element (or null) must be returned. ' +
133 'You may have returned undefined, an array or some other invalid object.'
134 );
@@ -159,8 +159,8 @@ describe('ReactStatelessComponent', () => {
159
160 ReactTestUtils.renderIntoDocument(<Parent/>);
161
162 - expect(console.error.calls.count()).toBe(1);
163 - expect(console.error.calls.argsFor(0)[0]).toContain(
162 + expectDev(console.error.calls.count()).toBe(1);
163 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
164 'Stateless function components cannot be given refs ' +
165 '(See ref "stateless" in StatelessComponent created by Parent). ' +
166 'Attempts to access this ref will fail.'
@@ -183,9 +183,9 @@ describe('ReactStatelessComponent', () => {
183
184 spyOn(console, 'error');
185 ReactTestUtils.renderIntoDocument(<Child />);
186 - expect(console.error.calls.count()).toBe(1);
187 - expect(console.error.calls.argsFor(0)[0]).toContain('a unique "key" prop');
188 - expect(console.error.calls.argsFor(0)[0]).toContain('Child');
186 + expectDev(console.error.calls.count()).toBe(1);
187 + expectDev(console.error.calls.argsFor(0)[0]).toContain('a unique "key" prop');
188 + expectDev(console.error.calls.argsFor(0)[0]).toContain('Child');
189 });
190
191 it('should support default props and prop types', () => {
@@ -197,7 +197,7 @@ describe('ReactStatelessComponent', () => {
197
198 spyOn(console, 'error');
199 ReactTestUtils.renderIntoDocument(<Child />);
200 - expect(console.error.calls.count()).toBe(1);
200 + expectDev(console.error.calls.count()).toBe(1);
201 expect(
202 console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
203 ).toBe(
@@ -265,8 +265,8 @@ describe('ReactStatelessComponent', () => {
265 expect(function() {
266 ReactTestUtils.renderIntoDocument(<div><NotAComponent /></div>);
267 }).toThrow(); // has no method 'render'
268 - expect(console.error.calls.count()).toBe(1);
269 - expect(console.error.calls.argsFor(0)[0]).toContain(
268 + expectDev(console.error.calls.count()).toBe(1);
269 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
270 'NotAComponent(...): A valid React element (or null) must be returned. You may ' +
271 'have returned undefined, an array or some other invalid object.'
272 );
src/renderers/shared/stack/reconciler/__tests__/ReactUpdates-test.js
+1
@@ -897,6 +897,7 @@ describe('ReactUpdates', () => {
897
898 var component = ReactTestUtils.renderIntoDocument(<A />);
899
900 + console.log('xxx', expect().toThrowError);
901 expect(() => component.setState({}, 'no')).toThrowError(
902 'setState(...): Expected the last optional `callback` argument ' +
903 'to be a function. Instead received: string.'
src/renderers/testing/__tests__/ReactTestRenderer-test.js
+2 -2
@@ -223,8 +223,8 @@ describe('ReactTestRenderer', () => {
223 }
224 ReactTestRenderer.create(<Baz />);
225 ReactTestRenderer.create(<Foo />);
226 - expect(console.error.calls.count()).toBe(1);
227 - expect(console.error.calls.argsFor(0)[0]).toContain(
226 + expectDev(console.error.calls.count()).toBe(1);
227 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
228 'Stateless function components cannot be given refs ' +
229 '(See ref "foo" in Bar created by Foo). ' +
230 'Attempts to access this ref will fail.'
src/shared/utils/__tests__/traverseAllChildren-test.js
+8 -8
@@ -84,8 +84,8 @@ describe('traverseAllChildren', () => {
84 '.0'
85 );
86 expect(traverseContext.length).toEqual(1);
87 - expect(console.error.calls.count()).toBe(1);
88 - expect(console.error.calls.argsFor(0)[0]).toContain(
87 + expectDev(console.error.calls.count()).toBe(1);
88 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
89 'Warning: Each child in an array or iterator should have a unique "key" prop.'
90 );
91 });
@@ -330,8 +330,8 @@ describe('traverseAllChildren', () => {
330 '.2'
331 );
332
333 - expect(console.error.calls.count()).toBe(1);
334 - expect(console.error.calls.argsFor(0)[0]).toContain(
333 + expectDev(console.error.calls.count()).toBe(1);
334 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
335 'Warning: Each child in an array or iterator should have a unique "key" prop.'
336 );
337 });
@@ -434,8 +434,8 @@ describe('traverseAllChildren', () => {
434 '.$#3:0'
435 );
436
437 - expect(console.error.calls.count()).toBe(1);
438 - expect(console.error.calls.argsFor(0)[0]).toContain(
437 + expectDev(console.error.calls.count()).toBe(1);
438 + expectDev(console.error.calls.argsFor(0)[0]).toContain(
439 'Warning: Using Maps as children is not yet fully supported. It is an ' +
440 'experimental feature that might be removed. Convert it to a sequence ' +
441 '/ iterable of keyed ReactElements instead.'
@@ -552,8 +552,8 @@ describe('traverseAllChildren', () => {
552
553 ReactTestUtils.renderIntoDocument(<Parent />);
554
555 - expect(console.error.calls.count()).toBe(1);
556 - expect(console.error.calls.argsFor(0)[0]).toBe(
555 + expectDev(console.error.calls.count()).toBe(1);
556 + expectDev(console.error.calls.argsFor(0)[0]).toBe(
557 'Warning: Using Maps as children is not yet fully supported. It is an ' +
558 'experimental feature that might be removed. Convert it to a sequence ' +
559 '/ iterable of keyed ReactElements instead. Check the render method of `Parent`.'
src/test/__tests__/ReactTestUtils-test.js
+2 -2
@@ -292,7 +292,7 @@ describe('ReactTestUtils', () => {
292
293 var shallowRenderer = ReactTestUtils.createRenderer();
294 shallowRenderer.render(<SimpleComponent />);
295 - expect(console.error.calls.count()).toBe(1);
295 + expectDev(console.error.calls.count()).toBe(1);
296 expect(
297 console.error.calls.argsFor(0)[0].replace(/\(at .+?:\d+\)/g, '(at **)')
298 ).toBe(
@@ -546,7 +546,7 @@ describe('ReactTestUtils', () => {
546 ReactDOM.findDOMNode(instance),
547 {clientX: CLIENT_X}
548 );
549 - expect(console.error.calls.count()).toBe(0);
549 + expectDev(console.error.calls.count()).toBe(0);
550 });
551
552 it('can scry with stateless components involved', () => {