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();
});
});