collectAndSaveCoverage function test

Last updated: 2026-03-01T23:25:47.056Z

Metrics

LOC: 84 Complexity: 17 Params: 5

Signature

collectAndSaveCoverage( page: Page, background: Worker, context: BrowserContext, testInfo: TestInfo, ): : Promise<void>

Architecture violations

View all

  • [warning] max-cyclomatic-complexity: 'collectAndSaveCoverage' has cyclomatic complexity 17 (max 10)
  • [warning] max-lines: 'collectAndSaveCoverage' has 84 lines (max 80)

Source Code

async function collectAndSaveCoverage(
  page: Page,
  background: Worker,
  context: BrowserContext,
  testInfo: TestInfo,
): Promise<void> {
  const map = createCoverageMap({});

  // 1. Service worker (background) — globalThis.__coverage__
  try {
    const swCov = await background.evaluate<CoverageMapData>(() =>
      JSON.parse(
        JSON.stringify(
          (globalThis as unknown as Record<string, unknown>)["__coverage__"] ??
            {},
        ),
      ),
    );
    if (Object.keys(swCov).length) map.merge(swCov);
  } catch {
    // SW may not have coverage data when VITE_COVERAGE is not set
  }

  // 2. Content scripts (isolated world) — collected via background scripting API
  try {
    const raw = await background.evaluate(async () => {
      const tabs = await chrome.tabs.query({ url: "http://localhost/*" });
      const results: string[] = [];
      for (const tab of tabs) {
        if (!tab.id) continue;
        try {
          const [res] = await chrome.scripting.executeScript({
            target: { tabId: tab.id },
            world: "ISOLATED",
            func: (): string =>
              JSON.stringify(
                (window as unknown as Record<string, unknown>)[
                  "__coverage__"
                ] ?? {},
              ),
          });
          if (res?.result) results.push(res.result as string);
        } catch {
          // Tab may have been closed or scripting not permitted
        }
      }
      return results;
    });
    for (const serialized of raw) {
      const cov = JSON.parse(serialized) as CoverageMapData;
      if (Object.keys(cov).length) map.merge(cov);
    }
  } catch {
    // Background scripting API unavailable
  }

  // 3. Extension pages (popup, options, devtools) — window.__coverage__
  for (const pg of context.pages()) {
    if (pg === page) continue;
    try {
      const pageCov = await pg.evaluate<CoverageMapData>(() =>
        JSON.parse(
          JSON.stringify(
            (window as unknown as Record<string, unknown>)["__coverage__"] ??
              {},
          ),
        ),
      );
      if (Object.keys(pageCov).length) map.merge(pageCov);
    } catch {
      // Page may have been closed
    }
  }

  fs.mkdirSync(COVERAGE_OUTPUT, { recursive: true });
  const safeName = testInfo.titlePath
    .join("_")
    .replace(/[^a-z0-9_]/gi, "-")
    .slice(0, 100);
  fs.writeFileSync(
    path.join(COVERAGE_OUTPUT, `${safeName}.json`),
    JSON.stringify(map.toJSON(), null, 2),
  );
}

No outgoing dependencies.

Impact (Incoming)

graph LR collectAndSaveCoverage["collectAndSaveCoverage"] getChromiumExecutablePath["getChromiumExecutablePath"] getChromiumExecutablePath -->|calls| collectAndSaveCoverage style collectAndSaveCoverage fill:#dbeafe,stroke:#2563eb,stroke-width:2px click collectAndSaveCoverage "ade0cf5b946e9936.html" click getChromiumExecutablePath "cf77c1808ae2925d.html"
SourceType
getChromiumExecutablePath calls