Skip to content

Commit

Permalink
Merge pull request #223 from storybookjs/prerelease
Browse files Browse the repository at this point in the history
Release 0.9.1
  • Loading branch information
yannbf committed Nov 21, 2022
2 parents 5f639ea + cef77d1 commit 990e95e
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 119 deletions.
7 changes: 4 additions & 3 deletions package.json
Expand Up @@ -58,8 +58,6 @@
"devDependencies": {
"@auto-it/released": "^10.37.1",
"@babel/cli": "^7.12.1",
"@babel/template": "^7.14.5",
"@babel/types": "^7.14.8",
"@jest/types": "^28.1.3",
"@storybook/addon-coverage": "^0.0.1",
"@storybook/addon-essentials": "^6.5.0",
Expand Down Expand Up @@ -109,15 +107,18 @@
"@babel/preset-env": "^7.19.4",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.18.6",
"@babel/template": "^7.14.5",
"@babel/types": "^7.14.8",
"@storybook/core-common": "^6.5.0",
"@storybook/csf": "0.0.2--canary.4566f4d.1",
"@storybook/csf-tools": "^6.5.0",
"@storybook/store": "^6.5.0",
"can-bind-to-host": "^1.1.1",
"commander": "^9.0.0",
"expect-playwright": "^0.8.0",
"global": "^4.4.0",
"jest": "^28.0.0",
"jest-environment-node":"^28.0.0",
"jest-circus":"^28.0.0",
"jest-junit": "^14.0.0",
"jest-playwright-preset": "^2.0.0",
"jest-runner": "^28.0.0",
Expand Down
7 changes: 5 additions & 2 deletions playwright/jest-setup.js
@@ -1,4 +1,4 @@
const { getTestRunnerConfig, setPreRender, setPostRender } = require('../dist/cjs');
const { getTestRunnerConfig, setPreRender, setPostRender, setupPage } = require('../dist/cjs');

const testRunnerConfig = getTestRunnerConfig(process.env.STORYBOOK_CONFIG_DIR);
if (testRunnerConfig) {
Expand All @@ -13,4 +13,7 @@ if (testRunnerConfig) {
}
}

global.__sbCollectCoverage = process.env.STORYBOOK_COLLECT_COVERAGE === 'true';
// If the transformed tests need a dependency, it has to be globally available
// in order to work both in defaul (file transformation) and stories/index.json mode.
globalThis.__sbSetupPage = setupPage;
globalThis.__sbCollectCoverage = process.env.STORYBOOK_COLLECT_COVERAGE === 'true';
11 changes: 1 addition & 10 deletions src/csf/transformCsf.ts
Expand Up @@ -5,8 +5,6 @@ import generate from '@babel/generator';
import { toId, storyNameFromExport } from '@storybook/csf';
import dedent from 'ts-dedent';

const logger = console;

export interface TestContext {
storyExport?: t.Identifier;
name: t.Literal;
Expand All @@ -15,11 +13,10 @@ export interface TestContext {
}
type TemplateResult = t.Statement | t.Statement[];
type FilePrefixer = () => TemplateResult;
type TestPrefixer = (context: TestContext) => TemplateResult;
export type TestPrefixer = (context: TestContext) => TemplateResult;

interface TransformOptions {
clearBody?: boolean;
filePrefixer?: FilePrefixer;
beforeEachPrefixer?: FilePrefixer;
testPrefixer?: TestPrefixer;
insertTestIfEmpty?: boolean;
Expand Down Expand Up @@ -87,7 +84,6 @@ const makeArray = (templateResult: TemplateResult) =>
export const transformCsf = (
code: string,
{
filePrefixer,
clearBody = false,
testPrefixer,
beforeEachPrefixer,
Expand Down Expand Up @@ -124,11 +120,6 @@ export const transformCsf = (

let result = '';

// FIXME: insert between imports
if (filePrefixer) {
const { code: prefixCode } = generate(t.program(makeArray(filePrefixer())), {});
result = `${prefixCode}\n`;
}
if (!clearBody) result = `${result}${code}\n`;
if (allTests.length) {
const describe = makeDescribe(
Expand Down
5 changes: 2 additions & 3 deletions src/playwright/hooks.ts
@@ -1,4 +1,3 @@
import global from 'global';
import type { Page } from 'playwright';
import type { StoryContext } from '@storybook/csf';

Expand All @@ -17,11 +16,11 @@ export interface TestRunnerConfig {
}

export const setPreRender = (preRender: TestHook) => {
global.__sbPreRender = preRender;
globalThis.__sbPreRender = preRender;
};

export const setPostRender = (postRender: TestHook) => {
global.__sbPostRender = postRender;
globalThis.__sbPostRender = postRender;
};

export const getStoryContext = async (page: Page, context: TestContext): Promise<StoryContext> => {
Expand Down
57 changes: 21 additions & 36 deletions src/playwright/transformPlaywright.test.ts
Expand Up @@ -47,12 +47,6 @@ describe('Playwright', () => {
filename
)
).toMatchInlineSnapshot(`
import global from 'global';
const {
setupPage
} = require('@storybook/test-runner');
if (!require.main) {
describe("Example/foo/bar", () => {
describe("A", () => {
Expand All @@ -73,8 +67,8 @@ describe('Playwright', () => {
});
});
if (global.__sbPreRender) {
await global.__sbPreRender(page, context);
if (globalThis.__sbPreRender) {
await globalThis.__sbPreRender(page, context);
}
const result = await page.evaluate(({
Expand All @@ -84,11 +78,11 @@ describe('Playwright', () => {
id: "example-foo-bar--a"
});
if (global.__sbPostRender) {
await global.__sbPostRender(page, context);
if (globalThis.__sbPostRender) {
await globalThis.__sbPostRender(page, context);
}
if (global.__sbCollectCoverage) {
if (globalThis.__sbCollectCoverage) {
const isCoverageSetupCorrectly = await page.evaluate(() => '__coverage__' in window);
if (!isCoverageSetupCorrectly) {
Expand All @@ -107,8 +101,9 @@ describe('Playwright', () => {
await testFn();
} catch (err) {
if (err.toString().includes('Execution context was destroyed')) {
console.log(\`An error occurred in the following story, most likely because of a navigation: "\${"Example/foo/bar"}/\${"A"}". Retrying...\`);
await jestPlaywright.resetPage();
await setupPage(global.page);
await globalThis.__sbSetupPage(globalThis.page);
await testFn();
} else {
throw err;
Expand All @@ -130,12 +125,6 @@ describe('Playwright', () => {
filename
)
).toMatchInlineSnapshot(`
import global from 'global';
const {
setupPage
} = require('@storybook/test-runner');
if (!require.main) {
describe("Example/foo/bar", () => {
describe("A", () => {
Expand All @@ -156,8 +145,8 @@ describe('Playwright', () => {
});
});
if (global.__sbPreRender) {
await global.__sbPreRender(page, context);
if (globalThis.__sbPreRender) {
await globalThis.__sbPreRender(page, context);
}
const result = await page.evaluate(({
Expand All @@ -167,11 +156,11 @@ describe('Playwright', () => {
id: "example-foo-bar--a"
});
if (global.__sbPostRender) {
await global.__sbPostRender(page, context);
if (globalThis.__sbPostRender) {
await globalThis.__sbPostRender(page, context);
}
if (global.__sbCollectCoverage) {
if (globalThis.__sbCollectCoverage) {
const isCoverageSetupCorrectly = await page.evaluate(() => '__coverage__' in window);
if (!isCoverageSetupCorrectly) {
Expand All @@ -190,8 +179,9 @@ describe('Playwright', () => {
await testFn();
} catch (err) {
if (err.toString().includes('Execution context was destroyed')) {
console.log(\`An error occurred in the following story, most likely because of a navigation: "\${"Example/foo/bar"}/\${"A"}". Retrying...\`);
await jestPlaywright.resetPage();
await setupPage(global.page);
await globalThis.__sbSetupPage(globalThis.page);
await testFn();
} else {
throw err;
Expand All @@ -214,12 +204,6 @@ describe('Playwright', () => {
filename
)
).toMatchInlineSnapshot(`
import global from 'global';
const {
setupPage
} = require('@storybook/test-runner');
if (!require.main) {
describe("Example/Header", () => {
describe("A", () => {
Expand All @@ -240,8 +224,8 @@ describe('Playwright', () => {
});
});
if (global.__sbPreRender) {
await global.__sbPreRender(page, context);
if (globalThis.__sbPreRender) {
await globalThis.__sbPreRender(page, context);
}
const result = await page.evaluate(({
Expand All @@ -251,11 +235,11 @@ describe('Playwright', () => {
id: "example-header--a"
});
if (global.__sbPostRender) {
await global.__sbPostRender(page, context);
if (globalThis.__sbPostRender) {
await globalThis.__sbPostRender(page, context);
}
if (global.__sbCollectCoverage) {
if (globalThis.__sbCollectCoverage) {
const isCoverageSetupCorrectly = await page.evaluate(() => '__coverage__' in window);
if (!isCoverageSetupCorrectly) {
Expand All @@ -274,8 +258,9 @@ describe('Playwright', () => {
await testFn();
} catch (err) {
if (err.toString().includes('Execution context was destroyed')) {
console.log(\`An error occurred in the following story, most likely because of a navigation: "\${"Example/Header"}/\${"A"}". Retrying...\`);
await jestPlaywright.resetPage();
await setupPage(global.page);
await globalThis.__sbSetupPage(globalThis.page);
await testFn();
} else {
throw err;
Expand Down
23 changes: 9 additions & 14 deletions src/playwright/transformPlaywright.ts
Expand Up @@ -4,13 +4,9 @@ import { userOrAutoTitle } from '@storybook/store';

import { getStorybookMetadata } from '../util';
import { transformCsf } from '../csf/transformCsf';
import type { TestPrefixer } from '../csf/transformCsf';
import dedent from 'ts-dedent';

const filePrefixer = template(`
import global from 'global';
const { setupPage } = require('@storybook/test-runner');
`);

const coverageErrorMessage = dedent`
[Test runner] An error occurred when evaluating code coverage:
The code in this story is not instrumented, which means the coverage setup is likely not correct.
Expand All @@ -28,19 +24,19 @@ export const testPrefixer = template(
page.evaluate(({ id, err }) => __throwError(id, err), { id: %%id%%, err: err.message });
});
if(global.__sbPreRender) {
await global.__sbPreRender(page, context);
if(globalThis.__sbPreRender) {
await globalThis.__sbPreRender(page, context);
}
const result = await page.evaluate(({ id, hasPlayFn }) => __test(id, hasPlayFn), {
id: %%id%%,
});
if(global.__sbPostRender) {
await global.__sbPostRender(page, context);
if(globalThis.__sbPostRender) {
await globalThis.__sbPostRender(page, context);
}
if(global.__sbCollectCoverage) {
if(globalThis.__sbCollectCoverage) {
const isCoverageSetupCorrectly = await page.evaluate(() => '__coverage__' in window);
if (!isCoverageSetupCorrectly) {
throw new Error(\`${coverageErrorMessage}\`);
Expand All @@ -56,8 +52,9 @@ export const testPrefixer = template(
await testFn();
} catch(err) {
if(err.toString().includes('Execution context was destroyed')) {
console.log(\`An error occurred in the following story, most likely because of a navigation: "\${%%title%%}/\${%%name%%}". Retrying...\`);
await jestPlaywright.resetPage();
await setupPage(global.page);
await globalThis.__sbSetupPage(globalThis.page);
await testFn();
} else {
throw err;
Expand All @@ -68,7 +65,7 @@ export const testPrefixer = template(
{
plugins: ['jsx'],
}
);
) as any as TestPrefixer;

const makeTitleFactory = (filename: string) => {
const { workingDir, normalizedStoriesEntries } = getStorybookMetadata();
Expand All @@ -79,8 +76,6 @@ const makeTitleFactory = (filename: string) => {

export const transformPlaywright = (src: string, filename: string) => {
const result = transformCsf(src, {
filePrefixer,
// @ts-ignore
testPrefixer,
insertTestIfEmpty: true,
clearBody: true,
Expand Down

0 comments on commit 990e95e

Please sign in to comment.