diff --git a/package.json b/package.json index b88612b..63a78fd 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,9 @@ "coveralls": "2.11.4", "istanbul": "0.4.1", "mocha": "2.3.4", + "react": "0.14.3", + "react-addons-test-utils": "0.14.3", + "react-dom": "0.14.3", "unexpected": "10.4.0" }, "scripts": { diff --git a/test/test.js b/test/test.js index c9490fc..8140982 100644 --- a/test/test.js +++ b/test/test.js @@ -82,7 +82,6 @@ describe('jsdomify API', () => { }); - describe('Isolation test', () => { before(() => { @@ -119,5 +118,62 @@ describe('jsdomify API', () => { }); + describe('React.js tests', () => { + + let getInstance, React, ReactDOM, TestUtils; + + before(() => { + jsdomify.create(); + + React = require('react'); + ReactDOM = require('react-dom'); + TestUtils = require('react-addons-test-utils'); + + class ReactComponent extends React.Component { + constructor(props) { + super(props); + this.displayName = 'ReactComponent'; + this.state = { + message: props.message || '' + }; + } + + render() { + return ( +
+

{this.state.message}

+
+ ); + } + + handleOnClick() { + this.setState({message: 'Burritos!'}); + } + } + + getInstance = (props) => { + return TestUtils.renderIntoDocument(); + } + }); + + after(() => { + jsdomify.destroy(); + }); + + it('should render a React component using jsdomify', () => { + const instance = getInstance({message: 'Bananas!'}); + const messageNode = ReactDOM.findDOMNode(instance.refs.message); + expect(messageNode.textContent, 'to be', 'Bananas!'); + }); + + it('should update a React component on click', () => { + const instance = getInstance({message: 'Bananas!'}); + const messageNode = ReactDOM.findDOMNode(instance.refs.message); + expect(messageNode.textContent, 'to be', 'Bananas!'); + + TestUtils.Simulate.click(messageNode); + expect(messageNode.textContent, 'to be', 'Burritos!'); + }); + }) -}); \ No newline at end of file +});