import * as React from 'react';
/**
* Test injectors
*/
import { createMemoryHistory } from 'history';
import { shallow } from 'enzyme';
import { identity } from 'lodash';
import configureStore from '../../configureStore';
// Fixtures
const Component = () => null;
const reducer = identity;
const memoryHistory = createMemoryHistory();
describe('injectReducer decorator', () => {
let store;
let injectors;
let ComponentWithReducer;
let injectReducer;
beforeAll(() => {
jest.mock('../reducerInjectors', () => ({
__esModule: true, // this property makes it work
default: jest.fn().mockImplementation(() => injectors),
}));
injectReducer = require('../injectReducer').default;
});
beforeEach(() => {
store = configureStore({}, memoryHistory);
injectors = {
injectReducer: jest.fn(),
};
ComponentWithReducer = injectReducer({ key: 'test', reducer: reducer })(Component);
jest.unmock('../reducerInjectors');
});
it('should inject a given reducer', () => {
shallow(, { context: { store: store } });
expect(injectors.injectReducer).toHaveBeenCalledTimes(1);
expect(injectors.injectReducer).toHaveBeenCalledWith('test', reducer);
});
it('should set a correct display name', () => {
expect(ComponentWithReducer.displayName).toBe('withReducer(Component)');
expect(
injectReducer({ key: 'test', reducer: reducer })(() => null).displayName,
).toBe('withReducer(Component)');
});
it('should propagate props', () => {
const props = { testProp: 'test' };
const renderedComponent = shallow(, {
context: { store: store },
});
expect(renderedComponent.prop('testProp')).toBe('test');
});
});