UNPKG

4.73 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13var __importDefault = (this && this.__importDefault) || function (mod) {
14 return (mod && mod.__esModule) ? mod : { "default": mod };
15};
16Object.defineProperty(exports, "__esModule", { value: true });
17var global_1 = __importDefault(require("global"));
18var addons_1 = require("@storybook/addons");
19var ensureOptionsDefaults_1 = __importDefault(require("./ensureOptionsDefaults"));
20var snapshotsTestsTemplate_1 = __importDefault(require("./snapshotsTestsTemplate"));
21var integrityTestTemplate_1 = __importDefault(require("./integrityTestTemplate"));
22var frameworkLoader_1 = __importDefault(require("../frameworks/frameworkLoader"));
23var describe = global_1.default.describe, globalWindow = global_1.default.window;
24global_1.default.STORYBOOK_REACT_CLASSES = global_1.default.STORYBOOK_REACT_CLASSES || {};
25var methods = ['beforeAll', 'beforeEach', 'afterEach', 'afterAll'];
26function callTestMethodGlobals(testMethod) {
27 methods.forEach(function (method) {
28 if (typeof testMethod[method] === 'function') {
29 global_1.default[method](testMethod[method], testMethod[method].timeout);
30 }
31 });
32}
33var isDisabled = function (parameter) {
34 return parameter === false || (parameter && parameter.disable === true);
35};
36function testStorySnapshots(options) {
37 if (options === void 0) { options = {}; }
38 if (typeof describe !== 'function') {
39 throw new Error('testStorySnapshots is intended only to be used inside jest');
40 }
41 addons_1.addons.setChannel(addons_1.mockChannel());
42 var _a = frameworkLoader_1.default(options), storybook = _a.storybook, framework = _a.framework, renderTree = _a.renderTree, renderShallowTree = _a.renderShallowTree;
43 var _b = ensureOptionsDefaults_1.default(options), asyncJest = _b.asyncJest, suite = _b.suite, storyNameRegex = _b.storyNameRegex, storyKindRegex = _b.storyKindRegex, stories2snapsConverter = _b.stories2snapsConverter, testMethod = _b.testMethod, integrityOptions = _b.integrityOptions, snapshotSerializers = _b.snapshotSerializers;
44 var testMethodParams = {
45 renderTree: renderTree,
46 renderShallowTree: renderShallowTree,
47 stories2snapsConverter: stories2snapsConverter,
48 };
49 // NOTE: as the store + preview's initialization process entirely uses
50 // `SychronousPromise`s in the v6 store case, the callback to the `then()` here
51 // will run *immediately* (in the same tick), and thus the `snapshotsTests`, and
52 // subsequent calls to `it()` etc will all happen within this tick, which is required
53 // by Jest (cannot add tests asynchronously)
54 globalWindow.__STORYBOOK_STORY_STORE__.initializationPromise.then(function () {
55 var data = storybook.raw().reduce(function (acc, item) {
56 if (storyNameRegex && !item.name.match(storyNameRegex)) {
57 return acc;
58 }
59 if (storyKindRegex && !item.kind.match(storyKindRegex)) {
60 return acc;
61 }
62 var kind = item.kind, render = item.storyFn, parameters = item.parameters;
63 var existing = acc.find(function (i) { return i.kind === kind; });
64 var fileName = item.parameters.fileName;
65 if (!isDisabled(parameters.storyshots)) {
66 if (existing) {
67 existing.children.push(__assign(__assign({}, item), { render: render, fileName: fileName }));
68 }
69 else {
70 acc.push({
71 kind: kind,
72 children: [__assign(__assign({}, item), { render: render, fileName: fileName })],
73 });
74 }
75 }
76 return acc;
77 }, []);
78 if (data.length) {
79 callTestMethodGlobals(testMethod);
80 snapshotsTestsTemplate_1.default({
81 data: data,
82 asyncJest: asyncJest,
83 suite: suite,
84 framework: framework,
85 testMethod: testMethod,
86 testMethodParams: testMethodParams,
87 snapshotSerializers: snapshotSerializers,
88 });
89 integrityTestTemplate_1.default(integrityOptions, stories2snapsConverter);
90 }
91 else {
92 throw new Error('storyshots found 0 stories');
93 }
94 });
95}
96exports.default = testStorySnapshots;