Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## Fixes

- `[jest-runtime]` Fix issue where user cannot utilize dynamic import despite specifying `--experimental-vm-modules` Node option ([#15842](https://github.com/jestjs/jest/pull/15842))
- `[jest-config]` Fix issue where custom reporters not loaded from legacy global module folder, i.e. `$HOME/.node_libraries` ([#15852](https://github.com/jestjs/jest/pull/15852))

## 30.2.0

Expand Down
32 changes: 32 additions & 0 deletions e2e/__tests__/customReporters.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,4 +179,36 @@ describe('Custom Reporters Integration', () => {
expect(stderr).toMatch(/ON_RUN_START_ERROR/);
expect(exitCode).toBe(1);
});

test('supports custom reporter stored in legacy module path, i.e. $HOME/.node_libraries', () => {
writeFiles(DIR, {
'__tests__/test.test.js': "test('test', () => {});",
'fakeHome/.node_libraries/@org/custom-reporter/index.js': `
'use strict';
module.exports = class Reporter {
onRunStart() {
throw new Error('ON_RUN_START_ERROR');
}
};
`,
'package.json': JSON.stringify({
jest: {
reporters: ['@org/custom-reporter'],
},
}),
});

const {stderr, exitCode} = runJest(DIR, undefined, {
env: {
HOME: path.resolve(DIR, 'fakeHome'),
// For Windows testing
USERPROFILE:
process.platform === 'win32'
? path.resolve(DIR, 'fakeHome')
: undefined,
},
});
expect(stderr).toMatch(/ON_RUN_START_ERROR/);
expect(exitCode).toBe(1);
});
});
14 changes: 13 additions & 1 deletion packages/jest-config/src/normalize.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
clearLine,
replacePathSepForGlob,
requireOrImportModule,
specialChars,
tryRealpath,
} from 'jest-util';
import {ValidationError, validate} from 'jest-validate';
Expand Down Expand Up @@ -169,7 +170,9 @@ const setupPreset = async (
);
}
throw createConfigError(
` Preset ${chalk.bold(presetPath)} not found relative to rootDir ${chalk.bold(options.rootDir)}.`,
` Preset ${chalk.bold(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is autogenerated by prettier

presetPath,
)} not found relative to rootDir ${chalk.bold(options.rootDir)}.`,
);
}
throw createConfigError(
Expand Down Expand Up @@ -378,8 +381,17 @@ const normalizeReporters = ({
);

if (!['default', 'github-actions', 'summary'].includes(reporterPath)) {
// There's a chance that users store custom reporter in legacy module paths
// such as $HOME/.node_libraries
const homeDir = specialChars.isWindows
? process.env.USERPROFILE
: process.env.HOME;
const legacyModulePaths = homeDir
? [path.resolve(homeDir, '.node_libraries')]
: undefined;
const reporter = Resolver.findNodeModule(reporterPath, {
basedir: rootDir,
paths: legacyModulePaths,
});
if (!reporter) {
throw new Resolver.ModuleNotFoundError(
Expand Down
2 changes: 1 addition & 1 deletion packages/jest-util/src/specialChars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/

const isWindows = process.platform === 'win32';
export const isWindows = process.platform === 'win32';

export const ARROW = ' \u203A ';
export const ICONS = {
Expand Down
Loading