diff --git a/CHANGELOG.md b/CHANGELOG.md index d1851bf9a915..c81d9f2225a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixes +- `[jest-message-util]` Fixes `.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..95d59187f8c8 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(); @@ -79,6 +79,10 @@ const babelStack = \u001b[90m 23 | \u001b[39m } \u001b[36melse\u001b[39m \u001b[36mif\u001b[39m (\u001b[36mtypeof\u001b[39m render \u001b[33m!==\u001b[39m \u001b[32m'function'\u001b[39m) {\u001b[0m `; +const mjsStackTrace = + ` ` + + `at stack (file:///Users/user/project/inline.mjs:1:1)`; + beforeEach(() => { jest.clearAllMocks(); }); @@ -365,3 +369,9 @@ describe('formatStackTrace', () => { expect(message).toMatchSnapshot(); }); }); + +it('getTopFrame should return a path for mjs files', () => { + const frame = getTopFrame(mjsStackTrace.split(/\n/)); + + 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; } }