From acae72da580a3a6740b04bd6655a5c5b57e400c9 Mon Sep 17 00:00:00 2001 From: Laurent Roger Date: Sun, 15 Jan 2017 00:22:26 +0100 Subject: [PATCH] https://github.com/mthuret/storybook-addon-specifications/issues/24 --- .storybook/addons.js | 2 ++ .storybook/config.js | 8 ++++++ .storybook/webpack.config.js | 24 ++++++++++++++++++ component/Kronos.js | 48 ++++++++++++++++++++++++++++++++++++ package.json | 10 +++++++- stories/index.js | 31 +++++++++++++++++++++++ 6 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 .storybook/addons.js create mode 100644 .storybook/config.js create mode 100644 .storybook/webpack.config.js create mode 100644 component/Kronos.js create mode 100644 stories/index.js diff --git a/.storybook/addons.js b/.storybook/addons.js new file mode 100644 index 0000000..2d85e05 --- /dev/null +++ b/.storybook/addons.js @@ -0,0 +1,2 @@ +import '@kadira/storybook/addons'; +import 'storybook-addon-specifications/register'; \ No newline at end of file diff --git a/.storybook/config.js b/.storybook/config.js new file mode 100644 index 0000000..0df5ef3 --- /dev/null +++ b/.storybook/config.js @@ -0,0 +1,8 @@ +import { configure } from '@kadira/storybook'; + +function loadStories() { + require('../stories/index.js'); + // You can require as many stories as you need. +} + +configure(loadStories, module); diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js new file mode 100644 index 0000000..6bfeaed --- /dev/null +++ b/.storybook/webpack.config.js @@ -0,0 +1,24 @@ +const path = require('path'); + +module.exports = { + module: { + loaders: [ + { + test: /\.js$/, + loader: 'babel', + exclude: /node_modules/, + }, + { + test: /\.json$/, + loader: 'json', + }, + ] + }, + externals: { + 'jsdom': 'window', + 'cheerio': 'window', + 'react/lib/ExecutionEnvironment': true, + 'react/lib/ReactContext': 'window', + 'react/addons': true, + } +} \ No newline at end of file diff --git a/component/Kronos.js b/component/Kronos.js new file mode 100644 index 0000000..502ee01 --- /dev/null +++ b/component/Kronos.js @@ -0,0 +1,48 @@ +import React, { Component } from 'react' +import Kronos from '../dist/bundle.js' +import Moment from 'moment' + +export default class KronosDateTime extends Component { + + constructor(props) { + super(props) + this.state = { + initDateTime: Moment().toISOString(), + } + } + + onChange(datetime) { + this.setState({ initDateTime: datetime,}) + console.log(datetime) + } + + render() { + return ( +
+ + +
+ ) + } +} \ No newline at end of file diff --git a/package.json b/package.json index d8dd8db..b152370 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "build:examples": "NODE_ENV=production webpack --config examples/webpack.config.examples.js", "clean": "rimraf dist && rimraf lib && npm run clean:examples", "clean:examples": "rimraf examples/bundle.*", - "push_examples": "./scripts/push_ghpages" + "push_examples": "./scripts/push_ghpages", + "storybook": "start-storybook -p 9001 -c .storybook" }, "repository": { "type": "git", @@ -40,6 +41,7 @@ }, "homepage": "http://dubert.github.io/react-kronos", "devDependencies": { + "@kadira/storybook": "^2.35.2", "babel-cli": "^6.10.1", "babel-core": "^6.10.4", "babel-eslint": "^6.0.4", @@ -48,15 +50,21 @@ "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.11.1", "babel-preset-stage-0": "^6.5.0", + "babel-register": "^6.18.0", "empty-module": "0.0.2", + "enzyme": "^2.7.0", + "expect": "^1.20.2", "express": "^4.13.4", + "json": "^9.0.4", "json-loader": "^0.5.4", "react": "^15.1.0", + "react-addons-test-utils": "^15.4.2", "react-dom": "^15.1.0", "react-transform-catch-errors": "^1.0.2", "react-transform-hmr": "^1.0.4", "redbox-react": "^1.2.6", "rimraf": "^2.5.2", + "storybook-addon-specifications": "^1.0.15", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1", "webpack-hot-middleware": "^2.10.0", diff --git a/stories/index.js b/stories/index.js new file mode 100644 index 0000000..f0a4795 --- /dev/null +++ b/stories/index.js @@ -0,0 +1,31 @@ +import React from 'react'; +import { storiesOf, action } from '@kadira/storybook'; +import { specs, describe, it } from 'storybook-addon-specifications' + +import {mount} from 'enzyme'; +import expect from 'expect'; + +import KronosDateTime from '../component/Kronos'; + +const onButtonPress = action('Button has been pressed!'); + +storiesOf('Kronos', module) + .add('Date and Time', function() { + const story = + ; + + specs(() => describe('Date and Time', function () { + it('Should have the current date and time', function () { + // Invariant Violation: addComponentAsRefTo(...): Only a ReactOwner can have refs. + let output = mount(story); + // works fine without the previous line + const foo = 'foo'; + expect(foo).toEqual('foo'); + }); + })); + + return story; + });