From 917d80a538ce9547aa72c63e5ddc9287496a77e4 Mon Sep 17 00:00:00 2001 From: Abdallah Samman Date: Sun, 16 Dec 2018 10:03:50 +0200 Subject: [PATCH] Add jest-storybook to lib --- lib/jest-storybook/README.md | 3 ++ lib/jest-storybook/package.json | 28 +++++++++++++++++ lib/jest-storybook/src/jest.config.js.sample | 6 ++++ lib/jest-storybook/src/jest.storybook.js | 32 ++++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 lib/jest-storybook/README.md create mode 100644 lib/jest-storybook/package.json create mode 100644 lib/jest-storybook/src/jest.config.js.sample create mode 100644 lib/jest-storybook/src/jest.storybook.js diff --git a/lib/jest-storybook/README.md b/lib/jest-storybook/README.md new file mode 100644 index 00000000000..4142654a1f7 --- /dev/null +++ b/lib/jest-storybook/README.md @@ -0,0 +1,3 @@ +# jest-storybook + +Jest implementation for Storybook. diff --git a/lib/jest-storybook/package.json b/lib/jest-storybook/package.json new file mode 100644 index 00000000000..13e9a456dbd --- /dev/null +++ b/lib/jest-storybook/package.json @@ -0,0 +1,28 @@ +{ + "name": "jest-storybook", + "version": "1.0.0", + "description": "Jest implementation for Storybook", + "main": "src/jest.storybook.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/storybooks/storybook" + }, + "keywords": [ + "jest", + "storybook" + ], + "author": "evexoio (Abdullah Samman)", + "license": "ISC", + "bugs": { + "url": "https://github.com/storybooks/storybook/issues" + }, + "homepage": "https://github.com/storybooks/storybook", + "devDependencies": { + "babel-core": "^6.26.3", + "babel-preset-jest": "^23.2.0", + "falafel": "^2.1.0" + } +} diff --git a/lib/jest-storybook/src/jest.config.js.sample b/lib/jest-storybook/src/jest.config.js.sample new file mode 100644 index 00000000000..d3fcc23223f --- /dev/null +++ b/lib/jest-storybook/src/jest.config.js.sample @@ -0,0 +1,6 @@ +module.exports = { + testMatch: ['**/*.stories.js'], + transform: { + '^.+\\.js$': 'jest-storybook', + }, +}; diff --git a/lib/jest-storybook/src/jest.storybook.js b/lib/jest-storybook/src/jest.storybook.js new file mode 100644 index 00000000000..20554b10045 --- /dev/null +++ b/lib/jest-storybook/src/jest.storybook.js @@ -0,0 +1,32 @@ +const falafel = require('falafel'); // eslint-disable-line import/no-extraneous-dependencies +const babel = require('babel-core'); +const jestPreset = require('babel-preset-jest'); + +module.exports.process = (src, filename) => { + let output = falafel(src, { sourceType: 'module' }, (node) => { // AST just to import getStorybook. overkill? + if (node.type === 'ImportSpecifier' && node.imported.name === 'storiesOf') { + node.update(`${node.source()}, getStorybook`); + } + }); + + output = ` +import addons, { mockChannel } from '@storybook/addons'; +addons.setChannel(mockChannel()); +${output.toString()} +const storybook = getStorybook(); +storybook.forEach((story) => { +story.stories.forEach((subStory) => { +describe(story.kind, () => { +it(subStory.name, () => { +expect(subStory.render()).toMatchSnapshot(); +}); }); }); });`; + + if (babel.util.canCompile(filename)) { + src = babel.transform(output, { + filename, + presets: [jestPreset], + }); + } + + return src; +};