/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; describe('ReactDOMFrameScheduling', () => { beforeEach(() => { jest.resetModules(); // Un-mock scheduler jest.mock('scheduler', () => require.requireActual('scheduler')); jest.mock('scheduler/src/SchedulerHostConfig', () => require.requireActual( 'scheduler/src/forks/SchedulerHostConfig.default.js', ), ); }); it('warns when requestAnimationFrame is not polyfilled in the browser', () => { const previousRAF = global.requestAnimationFrame; const previousMessageChannel = global.MessageChannel; try { delete global.requestAnimationFrame; global.MessageChannel = function MessageChannel() { return { port1: {}, port2: {}, }; }; spyOnDevAndProd(console, 'error'); require('react-dom'); expect(console.error.calls.count()).toEqual(1); expect(console.error.calls.argsFor(0)[0]).toMatch( "This browser doesn't support requestAnimationFrame.", ); } finally { global.MessageChannel = previousMessageChannel; global.requestAnimationFrame = previousRAF; } }); // We're just testing importing, not using it. // It is important because even isomorphic components may import it. it('can import findDOMNode in Node environment', () => { const previousRAF = global.requestAnimationFrame; const previousRIC = global.requestIdleCallback; const prevWindow = global.window; try { global.requestAnimationFrame = undefined; global.requestIdleCallback = undefined; // Simulate the Node environment: delete global.window; jest.resetModules(); expect(() => { require('react-dom'); }).not.toThrow(); } finally { global.requestAnimationFrame = previousRAF; global.requestIdleCallback = previousRIC; global.window = prevWindow; } }); });