diff --git a/types/storybook__addon-storyshots/index.d.ts b/types/storybook__addon-storyshots/index.d.ts index cbece6e354..e703f374da 100644 --- a/types/storybook__addon-storyshots/index.d.ts +++ b/types/storybook__addon-storyshots/index.d.ts @@ -11,11 +11,17 @@ import { Page, NavigationOptions, ScreenshotOptions } from "puppeteer"; export type Test = (options: { story: StoryObject; context: StoryContext; - renderShallowTree: any; - renderTree: any; + renderShallowTree: RenderTree; + renderTree: RenderTree; snapshotFileName: string; }) => void | undefined | Promise; +export type RenderTree = ( + story: StoryObject, + context: StoryContext, + options?: SnapshotOptions +) => void | undefined | Promise; + export interface SnapshotOptions { createNodeMock?: (element: any) => any; } @@ -54,10 +60,17 @@ export const renderOnly: Test; export function getSnapshotFileName(context: StoryContext): string; -export default function initStoryshots(options: { +// tslint:disable-next-line no-unnecessary-generics +export default function initStoryshots(options: InitOptions): void; + +export interface InitOptions { configPath?: string; - framework?: string; - integrityOptions?: {}; suite?: string; + storyKindRegex?: RegExp; + storyNameRegex?: RegExp; + framework?: string; test?: Test; -}): void; + renderer?: (node: React.ReactElement) => Rendered; + serializer?: (rendered: Rendered) => any; + integrityOptions?: {}; +} diff --git a/types/storybook__addon-storyshots/storybook__addon-storyshots-tests.ts b/types/storybook__addon-storyshots/storybook__addon-storyshots-tests.ts index a2bafa6a14..3d5eb2743a 100644 --- a/types/storybook__addon-storyshots/storybook__addon-storyshots-tests.ts +++ b/types/storybook__addon-storyshots/storybook__addon-storyshots-tests.ts @@ -1,5 +1,5 @@ import initStoryshots, { multiSnapshotWithOptions, snapshotWithOptions, getSnapshotFileName, renderOnly, imageSnapshot } from "@storybook/addon-storyshots"; -import { shallow } from 'enzyme'; +import { shallow, ShallowWrapper } from 'enzyme'; import toJson from 'enzyme-to-json'; import 'jest'; import 'jest-specific-snapshot'; @@ -55,3 +55,29 @@ initStoryshots({ } }) }); + +initStoryshots({ + configPath: 'config/storybook', + suite: 'storybook snapshots', + storyNameRegex: /^(?!NOTEST )/, + test: function renderWithoutSnapshotting({ story, context, renderTree }) { + const result = renderTree(story, context, { createNodeMock }); + const unmount = (tree: any) => typeof tree.unmount === 'function' && tree.unmount(); + return result instanceof Promise ? result.then(unmount) : unmount(result); + + function createNodeMock() { + return { + addEventListener: () => undefined, + getClientRects: () => [], + getBoundingClientRect: () => ({}), + getElementsByClassName: () => [], + }; + } + }, +}); + +// Ensure renderer is compatible with serializer +initStoryshots({ + renderer: shallow, + serializer: toJson, +});