test_runner: fix rerun ambiguous test failures · nodejs/node@9382be5 · GitHub
Skip to content

Commit 9382be5

Browse files
MoLowaduh95
authored andcommitted
test_runner: fix rerun ambiguous test failures
PR-URL: #61392 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Zeyu "Alex" Yang <himself65@outlook.com>
1 parent 55a3c70 commit 9382be5

4 files changed

Lines changed: 113 additions & 25 deletions

File tree

lib/internal/test_runner/reporter/rerun.js

Lines changed: 38 additions & 1 deletion

lib/internal/test_runner/test.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -698,10 +698,18 @@ class Test extends AsyncResource {
698698
this.root.testDisambiguator.set(testIdentifier, 1);
699699
}
700700
this.attempt = this.root.harness.previousRuns.length;
701-
const previousAttempt = this.root.harness.previousRuns[this.attempt - 1]?.[testIdentifier]?.passed_on_attempt;
701+
const previousAttempt = this.root.harness.previousRuns[this.attempt - 1]?.[testIdentifier];
702702
if (previousAttempt != null) {
703-
this.passedAttempt = previousAttempt;
704-
this.fn = noop;
703+
this.passedAttempt = previousAttempt.passed_on_attempt;
704+
this.fn = () => {
705+
for (let i = 0; i < (previousAttempt.children?.length ?? 0); i++) {
706+
const child = previousAttempt.children[i];
707+
this.createSubtest(Test, child.name, { __proto__: null }, noop, {
708+
__proto__: null,
709+
loc: [child.line, child.column, child.file],
710+
}, noop).start();
711+
}
712+
};
705713
}
706714
}
707715
}

test/fixtures/test-runner/rerun.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,19 @@ function ambiguousTest(expectedAttempts) {
2222
}
2323

2424
ambiguousTest(0);
25-
ambiguousTest(1);
25+
ambiguousTest(1);
26+
27+
function nestedAmbiguousTest(expectedAttempts) {
28+
return async (t) => {
29+
await t.test('nested', async (tt) => {
30+
await tt.test('2 levels deep', () => {});
31+
if (t.attempt < expectedAttempts) {
32+
throw new Error(`This test is expected to fail on the first ${expectedAttempts} attempts`);
33+
}
34+
});
35+
await t.test('ok', () => {});
36+
};
37+
}
38+
39+
test('nested ambiguous (expectedAttempts=0)', nestedAmbiguousTest(0));
40+
test('nested ambiguous (expectedAttempts=1)', nestedAmbiguousTest(2));

test/parallel/test-runner-test-rerun-failures.js

Lines changed: 48 additions & 20 deletions

0 commit comments

Comments
 (0)