UNPKG

reedx

Version:

Like redux but with less code

44 lines (34 loc) 1.53 kB
import React from 'react' import { keys, isFunction } from 'lodash' import { createStore, combineReducers } from 'redux' import { connect } from 'react-redux' import { shallowWithStore } from 'enzyme-redux' import model from '../model' import propsFrom from '../propsFrom' import handlersFrom from '../handlersFrom' const state = 0 const increment = (state) => state + 1 const decrement = (state) => state - 1 const counter = model({ name: 'counter', state, reducers: { increment, decrement } }) const Counter = ({ counter, increment, decrement }) => ( <div> <div>{counter}</div> <button className="increment" onClick={increment}>+</button> <button className="decrement" onClick={decrement}>-</button> </div> ) test('state properties based on their selectors', () => { const store = createStore(combineReducers({ counter })) const handlers = handlersFrom(counter)(store.dispatch) expect(keys(handlers)).toEqual(['increment', 'decrement']) }) test('map properties to a component using a redux connect()', () => { const store = createStore(combineReducers({ counter })) const Component = connect(propsFrom(counter), handlersFrom(counter))(Counter) const component = shallowWithStore(<Component />, store) const props = component.props() expect(isFunction(props.increment)).toBeTruthy() expect(isFunction(props.decrement)).toBeTruthy() expect(props.increment()).toEqual({ type: '@@reedx/counter/INCREMENT' }) expect(props.decrement()).toEqual({ type: '@@reedx/counter/DECREMENT' }) })