From a14bb549c631a8337842022982640ff617052272 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Sun, 2 Oct 2022 11:21:54 +0200 Subject: [PATCH] Update Float tests to use a clean environment per test not just suite --- .../src/__tests__/ReactDOMFloat-test.js | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMFloat-test.js b/packages/react-dom/src/__tests__/ReactDOMFloat-test.js index 3484c172c4cf2..ef2df006c0ca4 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFloat-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFloat-test.js @@ -5,11 +5,13 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; let JSDOM; +let JSDOMVirtualConsole; let Stream; let Scheduler; let React; @@ -18,7 +20,6 @@ let ReactDOMClient; let ReactDOMFizzServer; let Suspense; let textCache; -let document; let writable; const CSPnonce = null; let container; @@ -26,28 +27,44 @@ let buffer = ''; let hasErrored = false; let fatalError = undefined; +function resetModules() { + jest.resetModules(); + ({JSDOM, VirtualConsole: JSDOMVirtualConsole} = require('jsdom')); + Scheduler = require('scheduler'); + React = require('react'); + ReactDOMClient = require('react-dom/client'); + ReactDOMFizzServer = require('react-dom/server'); + Stream = require('stream'); + Suspense = React.Suspense; +} + +function resetJSDOM(markup) { + // Test Environment + const virtualConsole = new JSDOMVirtualConsole(); + virtualConsole.sendTo(console, { + omitJSDOMErrors: true, + }); + virtualConsole.on('jsdomError', error => { + console.error(error); + }); + const jsdom = new JSDOM(markup, { + runScripts: 'dangerously', + virtualConsole, + }); + + global.window = jsdom.window; + global.document = jsdom.window.document; + global.navigator = jsdom.window.navigator; + global.Node = jsdom.window.Node; +} + describe('ReactDOMFloat', () => { beforeEach(() => { - jest.resetModules(); - JSDOM = require('jsdom').JSDOM; - Scheduler = require('scheduler'); - React = require('react'); - ReactDOM = require('react-dom'); - ReactDOMClient = require('react-dom/client'); - ReactDOMFizzServer = require('react-dom/server'); - Stream = require('stream'); - Suspense = React.Suspense; + resetModules(); + resetJSDOM('
'); textCache = new Map(); - // Test Environment - const jsdom = new JSDOM( - '
', - { - runScripts: 'dangerously', - }, - ); - document = jsdom.window.document; container = document.getElementById('container'); buffer = ''; @@ -129,10 +146,8 @@ describe('ReactDOMFloat', () => { // We assume that we have now received a proper fragment of HTML. const bufferedContent = buffer; // Test Environment - const jsdom = new JSDOM(bufferedContent, { - runScripts: 'dangerously', - }); - document = jsdom.window.document; + resetJSDOM(bufferedContent); + container = document; buffer = ''; }