mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Constructor error message (#11395)
* Constructor test and fix complete * Linters and prettier run * Remove unnecessary checks * Update error message * Updat unit test * prettier * Tweak the check to be more specific * Move tests to ReactCompositeComponent-test * add error call count and remove line
This commit is contained in:
@@ -1533,4 +1533,43 @@ describe('ReactCompositeComponent', () => {
|
||||
ReactTestUtils.renderIntoDocument(<Component />);
|
||||
expect(mockArgs.length).toEqual(0);
|
||||
});
|
||||
|
||||
it('should return a meaningful warning when constructor is returned', () => {
|
||||
spyOn(console, 'error');
|
||||
class RenderTextInvalidConstructor extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
return {something: false};
|
||||
}
|
||||
|
||||
render() {
|
||||
return <div />;
|
||||
}
|
||||
}
|
||||
|
||||
expect(function() {
|
||||
ReactTestUtils.renderIntoDocument(<RenderTextInvalidConstructor />);
|
||||
}).toThrow();
|
||||
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.mostRecent().args[0]).toBe(
|
||||
'Warning: RenderTextInvalidConstructor(...): No `render` method found on the returned component instance: ' +
|
||||
'did you accidentally return an object from the constructor?',
|
||||
);
|
||||
});
|
||||
|
||||
it('should return error if render is not defined', () => {
|
||||
spyOn(console, 'error');
|
||||
class RenderTestUndefinedRender extends React.Component {}
|
||||
|
||||
expect(function() {
|
||||
ReactTestUtils.renderIntoDocument(<RenderTestUndefinedRender />);
|
||||
}).toThrow();
|
||||
|
||||
expectDev(console.error.calls.count()).toBe(1);
|
||||
expectDev(console.error.calls.mostRecent().args[0]).toBe(
|
||||
'Warning: RenderTestUndefinedRender(...): No `render` method found on the returned ' +
|
||||
'component instance: you may have forgotten to define `render`.',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
+19
-6
@@ -202,12 +202,25 @@ module.exports = function(
|
||||
if (__DEV__) {
|
||||
const name = getComponentName(workInProgress);
|
||||
const renderPresent = instance.render;
|
||||
warning(
|
||||
renderPresent,
|
||||
'%s(...): No `render` method found on the returned component ' +
|
||||
'instance: you may have forgotten to define `render`.',
|
||||
name,
|
||||
);
|
||||
|
||||
if (!renderPresent) {
|
||||
if (type.prototype && typeof type.prototype.render === 'function') {
|
||||
warning(
|
||||
false,
|
||||
'%s(...): No `render` method found on the returned component ' +
|
||||
'instance: did you accidentally return an object from the constructor?',
|
||||
name,
|
||||
);
|
||||
} else {
|
||||
warning(
|
||||
false,
|
||||
'%s(...): No `render` method found on the returned component ' +
|
||||
'instance: you may have forgotten to define `render`.',
|
||||
name,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const noGetInitialStateOnES6 =
|
||||
!instance.getInitialState ||
|
||||
instance.getInitialState.isReactClassApproved ||
|
||||
|
||||
Reference in New Issue
Block a user