From d7c55853e9d180290ae3cb30b2f329ebab8748ce Mon Sep 17 00:00:00 2001 From: Kai Schaper <303@posteo.de> Date: Mon, 10 Oct 2016 04:01:10 +0200 Subject: set up Mocha/Chai/Enzyme for React component unit testing --- spec/javascript/components/loading_indicator.test.jsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spec/javascript/components/loading_indicator.test.jsx (limited to 'spec/javascript/components') diff --git a/spec/javascript/components/loading_indicator.test.jsx b/spec/javascript/components/loading_indicator.test.jsx new file mode 100644 index 000000000..b2f9c919e --- /dev/null +++ b/spec/javascript/components/loading_indicator.test.jsx @@ -0,0 +1,13 @@ +import { expect } from 'chai'; +import { shallow } from 'enzyme'; +import React from 'react'; +global.React = React; + +import LoadingIndicator from '../../../app/assets/javascripts/components/components/loading_indicator' + +describe('', function() { + it('renders text that indicates loading', function() { + const wrapper = shallow(); + expect(wrapper.text()).to.match(/loading/i); + }); +}); -- cgit From 998f161e1d73ee699a99a65fa5e7701ea6602567 Mon Sep 17 00:00:00 2001 From: Kai Schaper <303@posteo.de> Date: Mon, 10 Oct 2016 22:32:03 +0200 Subject: add jsdom; add basic Avatar component test --- package.json | 3 ++- spec/javascript/components/avatar.test.jsx | 12 ++++++++++++ .../components/loading_indicator.test.jsx | 2 -- spec/javascript/setup.js | 22 ++++++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 spec/javascript/components/avatar.test.jsx create mode 100644 spec/javascript/setup.js (limited to 'spec/javascript/components') diff --git a/package.json b/package.json index 204d2bdfe..5d03df018 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mastodon", "scripts": { - "test": "mocha --compilers js:babel-register ./spec/javascript/components/*.test.jsx" + "test": "mocha --require ./spec/javascript/setup.js --compilers js:babel-register ./spec/javascript/components/*.test.jsx" }, "devDependencies": { "axios": "^0.14.0", @@ -16,6 +16,7 @@ "enzyme": "^2.4.1", "es6-promise": "^3.2.1", "immutable": "^3.8.1", + "jsdom": "^9.6.0", "mocha": "^3.1.1", "moment": "^2.14.1", "react": "^15.3.2", diff --git a/spec/javascript/components/avatar.test.jsx b/spec/javascript/components/avatar.test.jsx new file mode 100644 index 000000000..f69b538a2 --- /dev/null +++ b/spec/javascript/components/avatar.test.jsx @@ -0,0 +1,12 @@ +import { expect } from 'chai'; +import { render } from 'enzyme'; + +import Avatar from '../../../app/assets/javascripts/components/components/avatar' + +describe('', function() { + it('renders an img with the given src', function() { + const src = '/path/to/image.jpg'; + const wrapper = render(); + expect(wrapper.find(`img[src="${src}"]`)).to.have.length(1); + }); +}); diff --git a/spec/javascript/components/loading_indicator.test.jsx b/spec/javascript/components/loading_indicator.test.jsx index b2f9c919e..e62288405 100644 --- a/spec/javascript/components/loading_indicator.test.jsx +++ b/spec/javascript/components/loading_indicator.test.jsx @@ -1,7 +1,5 @@ import { expect } from 'chai'; import { shallow } from 'enzyme'; -import React from 'react'; -global.React = React; import LoadingIndicator from '../../../app/assets/javascripts/components/components/loading_indicator' diff --git a/spec/javascript/setup.js b/spec/javascript/setup.js new file mode 100644 index 000000000..636cdcc7e --- /dev/null +++ b/spec/javascript/setup.js @@ -0,0 +1,22 @@ +/** + * http://airbnb.io/enzyme/docs/guides/jsdom.html + */ +var jsdom = require('jsdom').jsdom; + +var exposedProperties = ['window', 'navigator', 'document']; + +global.document = jsdom(''); +global.window = document.defaultView; +Object.keys(document.defaultView).forEach((property) => { + if (typeof global[property] === 'undefined') { + exposedProperties.push(property); + global[property] = document.defaultView[property]; + } +}); + +global.navigator = { + userAgent: 'node.js' +}; + +var React = window.React = global.React = require('react'); +var ReactDOM = window.ReactDOM = global.ReactDOM = require('react-dom'); -- cgit From e0a44556221ab2555731315a033fd18a5c01ef19 Mon Sep 17 00:00:00 2001 From: Kai Schaper <303@posteo.de> Date: Mon, 10 Oct 2016 22:44:06 +0200 Subject: add sinon; add basic Button component test --- package.json | 3 ++- spec/javascript/components/button.test.jsx | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 spec/javascript/components/button.test.jsx (limited to 'spec/javascript/components') diff --git a/package.json b/package.json index 5d03df018..e980a72b2 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "redux": "^3.5.2", "redux-immutable": "^3.0.8", "redux-thunk": "^2.1.0", - "reselect": "^2.5.4" + "reselect": "^2.5.4", + "sinon": "^1.17.6" } } diff --git a/spec/javascript/components/button.test.jsx b/spec/javascript/components/button.test.jsx new file mode 100644 index 000000000..5610e67dd --- /dev/null +++ b/spec/javascript/components/button.test.jsx @@ -0,0 +1,14 @@ +import { expect } from 'chai'; +import { shallow } from 'enzyme'; +import sinon from 'sinon'; + +import Button from '../../../app/assets/javascripts/components/components/button' + +describe('