reedx
Version:
Like redux but with less code
44 lines (34 loc) • 1.53 kB
JavaScript
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' })
})