From 8585857b7a836e9e8f3df5f78acb3a3ef9c9c9ce Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Thu, 18 Aug 2022 15:35:23 +0200 Subject: [PATCH] feat: throw error on unconfigured coverage when running with --coverage --- src/setup-page.ts | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/setup-page.ts b/src/setup-page.ts index 1d951a46..66f1899d 100644 --- a/src/setup-page.ts +++ b/src/setup-page.ts @@ -1,5 +1,7 @@ -//@ts-nocheck -const sanitizeURL = (url) => { +import type { Page } from 'playwright'; +import dedent from 'ts-dedent'; + +const sanitizeURL = (url: string) => { let finalURL = url; // prepend URL protocol if not there if (finalURL.indexOf('http://') === -1 && finalURL.indexOf('https://') === -1) { @@ -20,9 +22,10 @@ const sanitizeURL = (url) => { return finalURL; }; -export const setupPage = async (page) => { +export const setupPage = async (page: Page) => { const targetURL = new URL('iframe.html', process.env.TARGET_URL).toString(); const viewMode = process.env.VIEW_MODE || 'story'; + const isCoverageMode = process.env.STORYBOOK_COLLECT_COVERAGE === 'true'; const renderedEvent = viewMode === 'docs' ? 'docsRendered' : 'storyRendered'; const referenceURL = process.env.REFERENCE_URL && sanitizeURL(process.env.REFERENCE_URL); @@ -43,7 +46,20 @@ export const setupPage = async (page) => { } throw err; - }); // FIXME: configure + }); + + if (isCoverageMode) { + const isCoverageSetupCorrectly = await page.evaluate(() => '__coverage__' in window); + if (!isCoverageSetupCorrectly) { + throw new Error( + dedent` + [Test runner] An error occurred when evaluating code coverage: + The code in Storybook is not instrumented, which means the coverage setup is not correct. + More info: https://github.com/storybookjs/test-runner#setting-up-code-coverage + ` + ); + } + } // if we ever want to log something from the browser to node await page.exposeBinding('logToPage', (_, message) => console.log(message));