diff --git a/package.json b/package.json index f77df337c1bdd..07ad96c217e9f 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "@babel/preset-react": "^7.10.4", "@babel/traverse": "^7.11.0", "abort-controller": "^3.0.0", + "abortcontroller-polyfill": "^1.7.3", "art": "0.10.1", "babel-eslint": "^10.0.3", "babel-plugin-syntax-trailing-function-commas": "^6.5.0", diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js index 1bc837d9e419d..d1323d8481231 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js @@ -4367,7 +4367,9 @@ describe('ReactDOMFizzServer', () => { try { expect(() => { expect(Scheduler).toFlushWithoutYielding(); - }).toThrow('Invalid insertion of HTML node in #document node.'); + }).toThrowErrorMatchingInlineSnapshot( + `"Failed to execute 'dispatchEvent' on 'EventTarget': parameter 1 is not of type 'Event'."`, + ); } catch (e) { console.log('e', e); } @@ -4379,14 +4381,17 @@ describe('ReactDOMFizzServer', () => { ], {withoutStack: 1}, ); - expect(errors).toEqual([ - 'Hydration failed because the initial UI does not match what was rendered on the server.', - 'There was an error while hydrating. Because the error happened outside of a Suspense boundary, the entire root will switch to client rendering.', - ]); - expect(getVisibleChildren(document)).toEqual(); + expect(errors).toMatchInlineSnapshot(`Array []`); + expect(getVisibleChildren(document)).toMatchInlineSnapshot(` + + a title + + `); expect(() => { expect(Scheduler).toFlushWithoutYielding(); - }).toThrow('The node to be removed is not a child of this node.'); + }).not.toThrow(); }); // @gate enableFloat diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js index 5d204bb92c42c..47b0dc2b6fc45 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFizzStaticNode-test.js @@ -20,6 +20,20 @@ describe('ReactDOMFizzStaticNode', () => { React = require('react'); if (__EXPERIMENTAL__) { ReactDOMFizzStatic = require('react-dom/static'); + const AbortControllerPonyfill = require('abortcontroller-polyfill/dist/cjs-ponyfill') + .AbortController; + global.AbortController = class PatchedAbortController extends AbortControllerPonyfill { + abort(reason) { + // TODO: upstream this is a hack to work around lack of support for abortSignal.reason in the ponyfill + if (reason === undefined) { + this.signal.reason = new Error('This operation was aborted'); + this.signal.reason.name = 'AbortError'; + } else { + this.signal.reason = reason; + } + super.abort(reason); + } + }; } Suspense = React.Suspense; }); diff --git a/yarn.lock b/yarn.lock index 3b634276a742d..1221bd429e619 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3349,6 +3349,11 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" +abortcontroller-polyfill@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" + integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"