diff --git a/CHANGELOG.md b/CHANGELOG.md index d1851bf9a915..2e004f3e3503 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixes +- `[jest-message-util]` Fix `.getTopFrame()` (and `toMatchInlineSnapshot()`) with `mjs` files ([#12277](https://github.com/facebook/jest/pull/12277)) - `[expect]` Add a fix for `.toHaveProperty('')` ([#12251](https://github.com/facebook/jest/pull/12251)) - `[jest-environment-node]` Add `atob` and `btoa` ([#12269](https://github.com/facebook/jest/pull/12269)) diff --git a/packages/jest-message-util/src/__tests__/messages.test.ts b/packages/jest-message-util/src/__tests__/messages.test.ts index cb4d7e91f959..f9c8ba4c5ff1 100644 --- a/packages/jest-message-util/src/__tests__/messages.test.ts +++ b/packages/jest-message-util/src/__tests__/messages.test.ts @@ -9,7 +9,7 @@ import {readFileSync} from 'graceful-fs'; import slash = require('slash'); import tempy = require('tempy'); -import {formatExecError, formatResultsErrors, formatStackTrace} from '..'; +import {formatExecError, formatResultsErrors, formatStackTrace, getTopFrame} from '..'; const rootDir = tempy.directory(); @@ -365,3 +365,9 @@ describe('formatStackTrace', () => { expect(message).toMatchSnapshot(); }); }); + +it('getTopFrame should return a path for mjs files', () => { + const frame = getTopFrame([' at stack (file:///Users/user/project/inline.mjs:1:1)']); + + expect(frame.file).toBe('/Users/user/project/inline.mjs'); +}); diff --git a/packages/jest-message-util/src/index.ts b/packages/jest-message-util/src/index.ts index f02a7f0fefeb..38b4eb78618b 100644 --- a/packages/jest-message-util/src/index.ts +++ b/packages/jest-message-util/src/index.ts @@ -14,6 +14,7 @@ import slash = require('slash'); import StackUtils = require('stack-utils'); import type {Config, TestResult} from '@jest/types'; import {format as prettyFormat} from 'pretty-format'; +import {fileURLToPath} from 'url'; import type {Frame} from './types'; export type {Frame} from './types'; @@ -273,6 +274,9 @@ export const getTopFrame = (lines: Array): Frame | null => { const parsedFrame = stackUtils.parseLine(line.trim()); if (parsedFrame && parsedFrame.file) { + if (parsedFrame.file.startsWith('file://')) { + parsedFrame.file = fileURLToPath(parsedFrame.file); + } return parsedFrame as Frame; } }