Skip to content

Commit

Permalink
Remove invokeGuardedCallback from commit phase (#21666)
Browse files Browse the repository at this point in the history
* Remove invokeGuardedCallback from commit phase

* Sync fork
  • Loading branch information
gaearon committed Jun 14, 2021
1 parent dbe3363 commit a8f5e77
Show file tree
Hide file tree
Showing 4 changed files with 172 additions and 636 deletions.
43 changes: 0 additions & 43 deletions packages/react-dom/src/__tests__/ReactDOM-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -408,49 +408,6 @@ describe('ReactDOM', () => {
}
});

it('throws in DEV if jsdom is destroyed by the time setState() is called', () => {
class App extends React.Component {
state = {x: 1};
componentDidUpdate() {}
render() {
return <div />;
}
}
const container = document.createElement('div');
const instance = ReactDOM.render(<App />, container);
const documentDescriptor = Object.getOwnPropertyDescriptor(
global,
'document',
);
try {
// Emulate jsdom environment cleanup.
// This is roughly what happens if the test finished and then
// an asynchronous callback tried to setState() after this.
delete global.document;

// The error we're interested in is thrown by invokeGuardedCallback, which
// in DEV is used 1) to replay a failed begin phase, or 2) when calling
// lifecycle methods. We're triggering the second case here.
const fn = () => instance.setState({x: 2});
if (__DEV__) {
expect(fn).toThrow(
'The `document` global was defined when React was initialized, but is not ' +
'defined anymore. This can happen in a test environment if a component ' +
'schedules an update from an asynchronous callback, but the test has already ' +
'finished running. To solve this, you can either unmount the component at ' +
'the end of your test (and ensure that any asynchronous operations get ' +
'canceled in `componentWillUnmount`), or you can change the test itself ' +
'to be asynchronous.',
);
} else {
expect(fn).not.toThrow();
}
} finally {
// Don't break other tests.
Object.defineProperty(global, 'document', documentDescriptor);
}
});

it('reports stacks with re-entrant renderToString() calls on the client', () => {
function Child2(props) {
return <span ariaTypo3="no">{props.children}</span>;
Expand Down
Loading

0 comments on commit a8f5e77

Please sign in to comment.