Skip to content

Commit 38daf70

Browse files
joshkelcpojer
andauthored
Shorter output for reference errors (#15767)
Co-authored-by: Christoph Nakazawa <[email protected]>
1 parent c9db5c6 commit 38daf70

File tree

5 files changed

+32
-23
lines changed

5 files changed

+32
-23
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
### Features
44

5+
- `[jest-runtime]` Reduce redundant ReferenceError messages
56
- `[jest-core]` Include test modules that failed to load when --onlyFailures is active
67

78
### Fixes

packages/jest-message-util/src/__tests__/__snapshots__/messages.test.ts.snap

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ exports[`formatStackTrace should properly handle string causes 1`] = `
7575
7676
Cause:
7777
string cause
78-
<dim></intensity>
79-
<dim></intensity>
78+
8079
"
8180
`;
8281

packages/jest-message-util/src/index.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@ const removeInternalStackEntries = (
242242
let pathCounter = 0;
243243

244244
return lines.filter(line => {
245+
if (!line) {
246+
return false;
247+
}
248+
245249
if (ANONYMOUS_FN_IGNORE.test(line)) {
246250
return false;
247251
}
@@ -368,17 +372,18 @@ export function formatStackTrace(
368372
}
369373
}
370374

371-
const stacktrace = lines
372-
.filter(Boolean)
373-
.map(
374-
line =>
375-
STACK_INDENT + formatPath(trimPaths(line), config, relativeTestPath),
376-
)
377-
.join('\n');
378-
379-
return renderedCallsite
380-
? `${renderedCallsite}\n${stacktrace}`
381-
: `\n${stacktrace}`;
375+
const stacktrace =
376+
lines.length === 0
377+
? ''
378+
: `\n${lines
379+
.map(
380+
line =>
381+
STACK_INDENT +
382+
formatPath(trimPaths(line), config, relativeTestPath),
383+
)
384+
.join('\n')}`;
385+
386+
return renderedCallsite + stacktrace;
382387
}
383388

384389
type FailedResults = Array<{

packages/jest-reporters/src/__tests__/__snapshots__/GitHubActionsReporter.test.ts.snap

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@
33
exports[`annotations logs error annotation when a test has reference error 1`] = `
44
Array [
55
"
6-
::error file=/user/project/__tests__/example.test.js,line=25,title=example test::ReferenceError: abc is not defined%0A%0A at Object.abc (__tests__/example.test.js:25:12)
6+
::error file=/user/project/__tests__/example.test.js,line=25,title=example test::ReferenceError: abc is not defined%0A at Object.abc (__tests__/example.test.js:25:12)
77
",
88
]
99
`;
1010

1111
exports[`annotations logs error annotation when an expectation fails to pass 1`] = `
1212
Array [
1313
"
14-
::error file=/user/project/__tests__/example.test.js,line=20,title=example test::expect(received).toBe(expected) // Object.is equality%0A%0AExpected: 1%0AReceived: 10%0A%0A at Object.toBe (__tests__/example.test.js:20:14)
14+
::error file=/user/project/__tests__/example.test.js,line=20,title=example test::expect(received).toBe(expected) // Object.is equality%0A%0AExpected: 1%0AReceived: 10%0A at Object.toBe (__tests__/example.test.js:20:14)
1515
",
1616
]
1717
`;
1818

1919
exports[`annotations logs error annotation when test is wrapped in describe block 1`] = `
2020
Array [
2121
"
22-
::error file=/user/project/__tests__/example.test.js,line=20,title=describe › example test::expect(received).toBe(expected) // Object.is equality%0A%0AExpected: 1%0AReceived: 10%0A%0A at Object.toBe (__tests__/example.test.js:20:14)
22+
::error file=/user/project/__tests__/example.test.js,line=20,title=describe › example test::expect(received).toBe(expected) // Object.is equality%0A%0AExpected: 1%0AReceived: 10%0A at Object.toBe (__tests__/example.test.js:20:14)
2323
",
2424
]
2525
`;
@@ -28,12 +28,12 @@ exports[`annotations logs warning annotation before logging errors when test res
2828
Array [
2929
Array [
3030
"
31-
::warning file=/user/project/__tests__/example.test.js,line=19,title=RETRY 1: example test::expect(received).toBeFalsy()%0A%0AReceived: true%0A%0A at Object.toBeFalsy (__tests__/example.test.js:19:20)
31+
::warning file=/user/project/__tests__/example.test.js,line=19,title=RETRY 1: example test::expect(received).toBeFalsy()%0A%0AReceived: true%0A at Object.toBeFalsy (__tests__/example.test.js:19:20)
3232
",
3333
],
3434
Array [
3535
"
36-
::error file=/user/project/__tests__/example.test.js,line=19,title=example test::expect(received).toBeFalsy()%0A%0AReceived: true%0A%0A at Object.toBeFalsy (__tests__/example.test.js:19:20)
36+
::error file=/user/project/__tests__/example.test.js,line=19,title=example test::expect(received).toBeFalsy()%0A%0AReceived: true%0A at Object.toBeFalsy (__tests__/example.test.js:19:20)
3737
",
3838
],
3939
]

packages/jest-runtime/src/index.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ export default class Runtime {
213213
private readonly cjsConditions: Array<string>;
214214
private isTornDown = false;
215215
private isInsideTestCode: boolean | undefined;
216+
private readonly loggedReferenceErrors = new Set<string>();
216217

217218
constructor(
218219
config: Config.ProjectConfig,
@@ -2462,11 +2463,14 @@ export default class Runtime {
24622463

24632464
const {message, stack} = separateMessageFromStack(originalStack);
24642465

2465-
console.error(
2466-
`\n${message}\n${formatStackTrace(stack, this._config, {
2467-
noStackTrace: false,
2468-
})}`,
2469-
);
2466+
const stackTrace = formatStackTrace(stack, this._config, {
2467+
noStackTrace: false,
2468+
});
2469+
const formattedMessage = `\n${message}${stackTrace ? `\n${stackTrace}` : ''}`;
2470+
if (!this.loggedReferenceErrors.has(formattedMessage)) {
2471+
console.error(formattedMessage);
2472+
this.loggedReferenceErrors.add(formattedMessage);
2473+
}
24702474
}
24712475

24722476
private constructInjectedModuleParameters(): Array<string> {

0 commit comments

Comments
 (0)