main
js 56 lines 1.77 KB
Raw
1 /**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @emails react-core
8 */
9
10 'use strict';
11
12 import {patchMessageChannel} from '../../../../scripts/jest/patchMessageChannel';
13
14 // Polyfills for test environment
15 global.ReadableStream =
16 require('web-streams-polyfill/ponyfill/es6').ReadableStream;
17 global.TextEncoder = require('util').TextEncoder;
18 global.TextDecoder = require('util').TextDecoder;
19
20 describe('ReactFlight with a non-writable Promise.prototype.then', () => {
21 let originalThen;
22
23 beforeEach(() => {
24 jest.resetModules();
25 originalThen = Object.getOwnPropertyDescriptor(Promise.prototype, 'then');
26 // eslint-disable-next-line no-extend-native
27 Object.defineProperty(Promise.prototype, 'then', {
28 ...originalThen,
29 writable: false,
30 });
31 });
32
33 afterEach(() => {
34 // eslint-disable-next-line no-extend-native
35 Object.defineProperty(Promise.prototype, 'then', originalThen);
36 });
37
38 it('can require Server and Client entrypoints', () => {
39 patchMessageChannel(require('scheduler'));
40 // Simulate the condition resolution
41 jest.mock('react', () => require('react/react.react-server'));
42 jest.mock('react-server-dom-webpack/server', () =>
43 require('react-server-dom-webpack/server.browser'),
44 );
45 require('./utils/WebpackMock');
46 const ReactServerDOMServer = require('react-server-dom-webpack/server');
47 expect(typeof ReactServerDOMServer.decodeReply).toBe('function');
48
49 __unmockReact();
50 jest.resetModules();
51 const ReactServerDOMClient = require('react-server-dom-webpack/client');
52 expect(typeof ReactServerDOMClient.createFromReadableStream).toBe(
53 'function',
54 );
55 });
56 });