fix: absolute path moduleNameMapper + jest.mock issue (#8727)

This commit is contained in:
chauchakching 2020-05-04 20:44:14 +08:00 committed by GitHub
parent 03dbb2fa82
commit 0a63d4099f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 67 additions and 6 deletions

View File

@ -16,6 +16,7 @@
- `[jest-config, jest-resolve]` [**BREAKING**] Remove support for `browser` field ([#9943](https://github.com/facebook/jest/pull/9943))
- `[jest-haste-map]` Stop reporting files as changed when they are only accessed ([#7347](https://github.com/facebook/jest/pull/7347))
- `[jest-resolve]` Show relative path from root dir for `module not found` errors ([#9963](https://github.com/facebook/jest/pull/9963))
- `[jest-runtime]` Fix absolute path moduleNameMapper + jest.mock bug ([#8727](https://github.com/facebook/jest/pull/8727))
### Chore & Maintenance

View File

@ -5,6 +5,11 @@ PASS __tests__/index.js
✓ moduleNameMapping correct configuration
`;
exports[`moduleNameMapper correct configuration mocking module of absolute path 1`] = `
PASS __tests__/index.js
✓ moduleNameMapping correct configuration
`;
exports[`moduleNameMapper wrong array configuration 1`] = `
FAIL __tests__/index.js
● Test suite failed to run

View File

@ -35,6 +35,20 @@ test('moduleNameMapper correct configuration', () => {
expect(wrap(rest)).toMatchSnapshot();
});
test('moduleNameMapper correct configuration mocking module of absolute path', () => {
const {stderr, exitCode} = runJest(
'module-name-mapper-correct-mock-absolute-path',
[],
{
stripAnsi: true,
},
);
const {rest} = extractSummary(stderr);
expect(exitCode).toBe(0);
expect(wrap(rest)).toMatchSnapshot();
});
test('moduleNameMapper with mocking', () => {
const {json} = runWithJson('module-name-mapper-mock');
expect(json.numTotalTests).toBe(2);

View File

@ -0,0 +1,16 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* 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 importedFn = require('../');
jest.mock('/components/Button');
test('moduleNameMapping correct configuration', () => {
expect(importedFn).toBeDefined();
});

View File

@ -0,0 +1,12 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
require('/components/Button');
module.exports = () => 'test';

View File

@ -0,0 +1,7 @@
{
"jest": {
"moduleNameMapper": {
"^/(.*)$": "<rootDir>/src/$1"
}
}
}

View File

@ -0,0 +1,8 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
module.exports = () => 'Button';

View File

@ -584,12 +584,10 @@ class Runtime {
}
const manualMockOrStub = this._resolver.getMockModule(from, moduleName);
let modulePath;
if (manualMockOrStub) {
modulePath = this._resolveModule(from, manualMockOrStub);
} else {
modulePath = this._resolveModule(from, moduleName);
}
let modulePath =
this._resolver.getMockModule(from, moduleName) ||
this._resolveModule(from, moduleName);
let isManualMock =
manualMockOrStub &&