From 47601cf5b41d97b0df351814b5e9a71d6ed66c6c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 25 Jul 2026 06:43:30 -0700 Subject: [PATCH] fix(qa): count skipped scenarios in suite summaries (#113696) Co-authored-by: Peter Steinberger --- extensions/qa-lab/src/suite-summary.ts | 1 + .../qa-lab/src/suite.summary-json.test.ts | 19 +++++++++++++++++++ extensions/qa-lab/src/suite.ts | 1 + 3 files changed, 21 insertions(+) diff --git a/extensions/qa-lab/src/suite-summary.ts b/extensions/qa-lab/src/suite-summary.ts index 3f87e2300ba6..607666f010a3 100644 --- a/extensions/qa-lab/src/suite-summary.ts +++ b/extensions/qa-lab/src/suite-summary.ts @@ -22,6 +22,7 @@ export type QaSuiteSummaryJson = { total: number; passed: number; failed: number; + skipped: number; }; metrics?: { wallMs: number; diff --git a/extensions/qa-lab/src/suite.summary-json.test.ts b/extensions/qa-lab/src/suite.summary-json.test.ts index 1cced4c84d4f..63c354a74ed0 100644 --- a/extensions/qa-lab/src/suite.summary-json.test.ts +++ b/extensions/qa-lab/src/suite.summary-json.test.ts @@ -134,6 +134,25 @@ describe("buildQaSuiteSummaryJson", () => { total: 2, passed: 1, failed: 1, + skipped: 0, + }); + }); + + it("includes skipped scenarios in the canonical summary counts", () => { + const json = buildQaSuiteSummaryJson({ + ...baseParams, + scenarios: [ + ...baseParams.scenarios, + { name: "Scenario C", status: "skip" as const, steps: [] }, + { name: "Scenario D", status: "skip" as const, steps: [] }, + ], + }); + + expect(json.counts).toEqual({ + total: 4, + passed: 1, + failed: 1, + skipped: 2, }); }); diff --git a/extensions/qa-lab/src/suite.ts b/extensions/qa-lab/src/suite.ts index 98308732f8ca..de6adad05496 100644 --- a/extensions/qa-lab/src/suite.ts +++ b/extensions/qa-lab/src/suite.ts @@ -723,6 +723,7 @@ export function buildQaSuiteSummaryJson(params: QaSuiteSummaryJsonParams): QaSui total: params.scenarios.length, passed: params.scenarios.filter((scenario) => scenario.status === "pass").length, failed: countQaSuiteFailedScenarios(params.scenarios), + skipped: params.scenarios.filter((scenario) => scenario.status === "skip").length, }, ...(params.metrics ? { metrics: params.metrics } : {}), ...(params.evidence ? { evidence: params.evidence } : {}),