From fb1d6afe973fe7b51ebc295463726fc4640a3ebe Mon Sep 17 00:00:00 2001 From: Cheton Wu Date: Tue, 2 Jan 2018 18:33:40 +0800 Subject: [PATCH] Setup tests --- package.json | 4 +++- setupTests.js | 33 +++++++++++++++++++++++++++++++++ test/index.js | 19 ++++++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 setupTests.js diff --git a/package.json b/package.json index 5ff3ba0..aacf649 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "cleancss": "cleancss -o dist/react-modal.min.css dist/react-modal.css", "demo": "http-server -p 8000 docs/", "lint": "eslint ./src", - "lint:fix": "eslint --fix ./src", "test": "tap test/*.js --node-arg=--require --node-arg=babel-register --node-arg=--require --node-arg=babel-polyfill", "coveralls": "tap test/*.js --coverage --coverage-report=text-lcov --nyc-arg=--require --nyc-arg=babel-register --nyc-arg=--require --nyc-arg=babel-polyfill | coveralls", "dev": "cd examples; webpack-dev-server --hot --inline --host 0.0.0.0 --port 8000 --content-base ../docs" @@ -66,6 +65,8 @@ "clean-css-cli": "~4.1.10", "coveralls": "~3.0.0", "css-loader": "~0.28.7", + "enzyme": "~3.2.0", + "enzyme-adapter-react-16": "~1.1.1", "eslint": "~4.14.0", "eslint-config-trendmicro": "~1.3.0", "eslint-loader": "~1.9.0", @@ -77,6 +78,7 @@ "find-imports": "~0.5.2", "html-webpack-plugin": "~2.30.1", "http-server": "~0.10.0", + "jsdom": "~11.5.1", "nib": "~1.1.2", "react": "^0.14.0 || >=15.0.0", "react-dom": "^0.14.0 || >=15.0.0", diff --git a/setupTests.js b/setupTests.js new file mode 100644 index 0000000..3f25c29 --- /dev/null +++ b/setupTests.js @@ -0,0 +1,33 @@ +import Enzyme from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; +import { JSDOM } from 'jsdom'; + +// React 16 Enzyme adapter +Enzyme.configure({ adapter: new Adapter() }); + +// Ignore `.styl` files +require.extensions['.styl'] = () => { + return; +}; + +// JSDOM +const jsdom = new JSDOM(''); +const { window } = jsdom; + +const copyProps = (src, target) => { + const props = Object.getOwnPropertyNames(src) + .filter(prop => typeof target[prop] === 'undefined') + .reduce((result, prop) => ({ + ...result, + [prop]: Object.getOwnPropertyDescriptor(src, prop), + }), {}); + Object.defineProperties(target, props); +}; + +global.window = window; +global.document = window.document; +global.navigator = { + userAgent: 'node.js', +}; + +copyProps(window, global); diff --git a/test/index.js b/test/index.js index 361cc49..de19843 100644 --- a/test/index.js +++ b/test/index.js @@ -1,5 +1,22 @@ +import React from 'react'; +import { mount } from 'enzyme'; import { test } from 'tap'; +import '../setupTests'; +import Modal from '../src'; -test('noop', (t) => { +test('', (t) => { + const wrapper = mount(( + + + + + + + + + + + )); + t.equal(wrapper.find(Modal).length, 1, 'should render component'); t.end(); });