mirror of
https://github.com/hanzoai/jest.git
synced 2026-09-24 16:59:57 +00:00
128 lines
3.8 KiB
JavaScript
128 lines
3.8 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.
|
|
*/
|
|
'use strict';
|
|
|
|
const dedent = require('dedent');
|
|
|
|
let platform;
|
|
|
|
function testRequire(filename) {
|
|
return () => (platform = require(filename));
|
|
}
|
|
|
|
test('should explicitly resolve filename.<platform>.js', () => {
|
|
expect(testRequire('../test1.android.js')).not.toThrow();
|
|
expect(platform.extension).toBe('android.js');
|
|
});
|
|
|
|
test('should explicitly resolve filename.native.js', () => {
|
|
expect(testRequire('../test1.native.js')).not.toThrow();
|
|
expect(platform.extension).toBe('native.js');
|
|
});
|
|
|
|
test('should explicitly resolve filename.js', () => {
|
|
expect(testRequire('../test1.js')).not.toThrow();
|
|
expect(platform.extension).toBe('js');
|
|
});
|
|
|
|
test('should explicitly resolve filename.json', () => {
|
|
expect(testRequire('../test1.json')).not.toThrow();
|
|
expect(platform.extension).toBe('json');
|
|
});
|
|
|
|
test('should resolve filename.<platform>.js', () => {
|
|
expect(testRequire('../test1')).not.toThrow();
|
|
expect(platform.extension).toBe('android.js');
|
|
});
|
|
|
|
test('should resolve filename.<platform>.js from haste package', () => {
|
|
expect(testRequire('custom-resolve/test1')).not.toThrow();
|
|
expect(platform.extension).toBe('android.js');
|
|
});
|
|
|
|
test('should resolve filename.native.js', () => {
|
|
expect(testRequire('../test2')).not.toThrow();
|
|
expect(platform.extension).toBe('native.js');
|
|
});
|
|
|
|
test('should resolve filename.native.js with moduleNameMapper', () => {
|
|
expect(testRequire('test2mapper')).not.toThrow();
|
|
expect(platform.extension).toBe('native.js');
|
|
});
|
|
|
|
test('should resolve filename.js', () => {
|
|
expect(testRequire('../test3')).not.toThrow();
|
|
expect(platform.extension).toBe('js');
|
|
});
|
|
|
|
test('should resolve filename.json', () => {
|
|
expect(testRequire('../test4')).not.toThrow();
|
|
expect(platform.extension).toBe('json');
|
|
});
|
|
|
|
test('should preserve identity for symlinks', () => {
|
|
expect(require('../../../packages/jest-resolve')).toBe(
|
|
require('jest-resolve'),
|
|
);
|
|
});
|
|
|
|
test('should require resolve haste files correctly', () => {
|
|
// We unmock Test5 (they should already be, but to be sure).
|
|
jest.unmock('Test5');
|
|
|
|
// Test5 is a standard module, that has a mock (but it is unmocked here).
|
|
expect(require.resolve('Test5')).toBe(require.resolve('../Test5'));
|
|
|
|
expect(require('Test5').key).toBe('real');
|
|
|
|
// Test6 only exits as a mock; so even when unmocked, we resolve to the mock.
|
|
expect(require.resolve('Test6')).toBe(require.resolve('../__mocks__/Test6'));
|
|
|
|
expect(require('Test6').key).toBe('mock');
|
|
});
|
|
|
|
test('should require resolve haste mocks correctly', () => {
|
|
// Now we mock Test5 and Test6.
|
|
jest.mock('Test5');
|
|
jest.mock('Test6');
|
|
|
|
// The resolution still points to the real one, but requires the mock.
|
|
expect(require.resolve('Test5')).toBe(require.resolve('../Test5'));
|
|
|
|
expect(require('Test5').key).toBe('mock');
|
|
|
|
// And Test6 points to the mock, because Test6 does not exist as a module.
|
|
expect(require.resolve('Test6')).toBe(require.resolve('../__mocks__/Test6'));
|
|
|
|
expect(require('Test6').key).toBe('mock');
|
|
});
|
|
|
|
test('should throw module not found error if the module has dependencies that cannot be found', () => {
|
|
expect(() => require('Test7')).toThrow(
|
|
expect.objectContaining({
|
|
code: 'MODULE_NOT_FOUND',
|
|
message: dedent`
|
|
Cannot find module 'nope' from 'requiresUnexistingModule.js'
|
|
|
|
Require stack:
|
|
requiresUnexistingModule.js
|
|
Test7.js
|
|
__tests__/resolve.test.js\n
|
|
`,
|
|
}),
|
|
);
|
|
});
|
|
|
|
test('should throw module not found error if the module cannot be found', () => {
|
|
expect(() => require('Test8')).toThrow(
|
|
expect.objectContaining({
|
|
code: 'MODULE_NOT_FOUND',
|
|
message: "Cannot find module 'Test8' from '__tests__/resolve.test.js'",
|
|
}),
|
|
);
|
|
});
|