diff --git a/test/createDevTools.spec.js b/test/createDevTools.spec.js new file mode 100644 index 00000000..1c4f82d1 --- /dev/null +++ b/test/createDevTools.spec.js @@ -0,0 +1,83 @@ +import expect from 'expect'; +import jsdom from 'mocha-jsdom'; +import React, { Component } from 'react'; +import TestUtils from 'react-addons-test-utils'; +import createDevTools from '../src/createDevTools'; +import devTools from '../src/devTools'; +import { createStore } from 'redux'; + +class MockMonitor extends Component { + render() { + return null; + } +} + +describe('createDevTools', () => { + jsdom(); + + it('should pass devToolsStore to monitor', () => { + const store = devTools()(createStore)(() => {}); + const DevTools = createDevTools(React); + const tree = TestUtils.renderIntoDocument( + + ); + const mockMonitor = TestUtils.findRenderedComponentWithType(tree, MockMonitor); + expect(mockMonitor.props.store).toBe(store.devToolsStore); + }); + + it('should pass props to monitor', () => { + const store = devTools()(createStore)(() => {}); + const DevTools = createDevTools(React); + const tree = TestUtils.renderIntoDocument( + + ); + const mockMonitor = TestUtils.findRenderedComponentWithType(tree, MockMonitor); + expect(mockMonitor.props.one).toBe(1); + expect(mockMonitor.props.two).toBe(2); + }); + + it('should subscribe monitor to store updates', () => { + const DevTools = createDevTools(React); + const store = devTools()(createStore)( + (state, action) => { + switch (action.type) { + case 'INC': + return state + 1; + default: + return state; + } + }, + 0 + ); + const tree = TestUtils.renderIntoDocument( + + ); + + store.dispatch({type: 'INC'}); + + const mockMonitor = TestUtils.findRenderedComponentWithType(tree, MockMonitor); + const currentStateIndex = mockMonitor.props.currentStateIndex; + const computedStates = mockMonitor.props.computedStates; + + expect(computedStates[currentStateIndex].state).toBe(1); + }); + + it('should warn if devTools() not in middleware', () => { + const spy = expect.spyOn(console, 'error'); + const store = createStore(() => {}); + const DevTools = createDevTools(React); + + expect( + TestUtils.renderIntoDocument, + ).withArgs( + + ).toThrow(); + + expect(spy.calls).toContain( + /Could not find the devTools store/, + (call, errMsg) => call.arguments[0].match(errMsg) + ); + + spy.restore(); + }); +});