UNPKG

@olistic/storyshots

Version:

Storyshots - Jest Snapshot Testing for React Storybook.

164 lines (124 loc) 5.31 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); exports.default = testStorySnapshots; var _reactTestRenderer = require('react-test-renderer'); var _reactTestRenderer2 = _interopRequireDefault(_reactTestRenderer); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _readPkgUp = require('read-pkg-up'); var _readPkgUp2 = _interopRequireDefault(_readPkgUp); var _storybookAddons = require('@kadira/storybook-addons'); var _storybookAddons2 = _interopRequireDefault(_storybookAddons); var _require_context = require('./require_context'); var _require_context2 = _interopRequireDefault(_require_context); var _storybookChannelMock = require('./storybook-channel-mock'); var _storybookChannelMock2 = _interopRequireDefault(_storybookChannelMock); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _global = global, describe = _global.describe, it = _global.it, expect = _global.expect; var storybook = void 0; var configPath = void 0; var babel = require('babel-core'); var pkg = _readPkgUp2.default.sync().pkg; var isStorybook = pkg.devDependencies && pkg.devDependencies['@kadira/storybook'] || pkg.dependencies && pkg.dependencies['@kadira/storybook']; var isRNStorybook = pkg.devDependencies && pkg.devDependencies['@kadira/react-native-storybook'] || pkg.dependencies && pkg.dependencies['@kadira/react-native-storybook']; function testStorySnapshots() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _storybookAddons2.default.setChannel((0, _storybookChannelMock2.default)()); if (isStorybook) { storybook = require.requireActual('@kadira/storybook'); var loadBabelConfig = require('@kadira/storybook/dist/server/babel_config').default; var configDirPath = _path2.default.resolve(options.configPath || '.storybook'); configPath = _path2.default.join(configDirPath, 'config.js'); var content = babel.transformFileSync(configPath, babelConfig).code; var contextOpts = { filename: configPath, dirname: configDirPath }; var babelConfig = loadBabelConfig(configDirPath); (0, _require_context2.default)(content, contextOpts); } else if (isRNStorybook) { storybook = require.requireActual('@kadira/react-native-storybook'); configPath = _path2.default.resolve(options.configPath || 'storybook'); require.requireActual(configPath); } else { throw new Error('\'storyshots\' is intended only to be used with react storybook or react native storybook'); } if (typeof describe !== 'function') { throw new Error('\'testStorySnapshots\' is intended only to be used inside jest'); } var suit = options.suit || 'Storyshots'; var stories = storybook.getStorybook(); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { var _loop = function _loop() { var group = _step.value; if (options.storyKindRegex && !group.kind.match(options.storyKindRegex)) { return 'continue'; } describe(suit, function () { describe(group.kind, function () { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { var _loop2 = function _loop2() { var story = _step2.value; if (options.storyNameRegex && !story.name.match(options.storyNameRegex)) { return 'continue'; } it(story.name, function () { var context = { kind: group.kind, story: story.name }; var renderedStory = story.render(context); var tree = _reactTestRenderer2.default.create(renderedStory).toJSON(); expect(tree).toMatchSnapshot(); }); }; for (var _iterator2 = (0, _getIterator3.default)(group.stories), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _ret2 = _loop2(); if (_ret2 === 'continue') continue; } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } }); }); }; for (var _iterator = (0, _getIterator3.default)(stories), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _ret = _loop(); if (_ret === 'continue') continue; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }