mirror of
https://github.com/hanzoai/jest.git
synced 2026-09-24 16:59:57 +00:00
33 lines
1.3 KiB
JavaScript
33 lines
1.3 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
import {createRequire} from 'node:module';
|
|
import {jest} from '@jest/globals';
|
|
|
|
const require = createRequire(import.meta.url);
|
|
|
|
test('require + await import of the same .cjs inside isolation keep distinct shapes', async () => {
|
|
await jest.isolateModulesAsync(async () => {
|
|
const cjsBefore = require('../module.cjs');
|
|
expect(cjsBefore).toEqual({kind: 'cjs', value: 'cjs-shape'});
|
|
|
|
const esm = await import('../module.cjs');
|
|
// ESM-side default unwrap exposes the CJS module.exports as the default.
|
|
expect(esm.default).toEqual({kind: 'cjs', value: 'cjs-shape'});
|
|
|
|
// Re-require from the CJS slot. If the ESM write into the shared
|
|
// isolation overlay had clobbered the CJS slot, this would return the ESM
|
|
// namespace (or its synthetic wrapper) instead of the original CJS exports.
|
|
const cjsAfter = require('../module.cjs');
|
|
expect(cjsAfter).toBe(cjsBefore);
|
|
expect(cjsAfter).toEqual({kind: 'cjs', value: 'cjs-shape'});
|
|
expect(cjsAfter).not.toBe(esm);
|
|
// `esm` itself is the ESM namespace object, distinct from the CJS exports.
|
|
expect(esm).not.toBe(cjsBefore);
|
|
expect(esm[Symbol.toStringTag]).toBe('Module');
|
|
});
|
|
});
|