about summary refs log tree commit diff
path: root/spec/javascript
diff options
context:
space:
mode:
Diffstat (limited to 'spec/javascript')
-rw-r--r--spec/javascript/components/avatar.test.jsx12
-rw-r--r--spec/javascript/components/button.test.jsx14
-rw-r--r--spec/javascript/components/loading_indicator.test.jsx11
-rw-r--r--spec/javascript/setup.js22
4 files changed, 59 insertions, 0 deletions
diff --git a/spec/javascript/components/avatar.test.jsx b/spec/javascript/components/avatar.test.jsx
new file mode 100644
index 000000000..79b7d02f4
--- /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('<Avatar />', () => {
+  it('renders an img with the given src', () => {
+    const src = '/path/to/image.jpg';
+    const wrapper = render(<Avatar src={src} size={100} />);
+    expect(wrapper.find(`img[src="${src}"]`)).to.have.length(1);
+  });
+});
diff --git a/spec/javascript/components/button.test.jsx b/spec/javascript/components/button.test.jsx
new file mode 100644
index 000000000..0f16ebe8e
--- /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('<Button />', () => {
+  it('simulates click events', () => {
+    const onClick = sinon.spy();
+    const wrapper = shallow(<Button onClick={onClick} />);
+    wrapper.find('button').simulate('click');
+    expect(onClick.calledOnce).to.equal(true);
+  });
+});
diff --git a/spec/javascript/components/loading_indicator.test.jsx b/spec/javascript/components/loading_indicator.test.jsx
new file mode 100644
index 000000000..7039dbfbd
--- /dev/null
+++ b/spec/javascript/components/loading_indicator.test.jsx
@@ -0,0 +1,11 @@
+import { expect } from 'chai';
+import { shallow } from 'enzyme';
+
+import LoadingIndicator from '../../../app/assets/javascripts/components/components/loading_indicator'
+
+describe('<LoadingIndicator />', () => {
+  it('renders text that indicates loading', () => {
+    const wrapper = shallow(<LoadingIndicator />);
+    expect(wrapper.text()).to.match(/loading/i);
+  });
+});
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');