Я написал HO C, чтобы динамически вводить редукторы в мой проект, который работал хорошо. Но мне трудно испытать это на шутку. Я сомневаюсь, как проверить, какой возврат этого расширенного класса, внутри функции withReducer, и как проверить, была ли вызвана функция contextType (store.injectReducer) с правильными параметрами.
Мой withReducer. js
/* eslint-disable react/no-deprecated */
import React from 'react';
import { ReactReduxContext } from 'react-redux';
export const withReducer = (key, reducer) => (WrappedComponent) => {
class Extended extends React.Component {
static WrappedComponent = WrappedComponent;
componentWillMount() {
const { store } = this.context;
store.injectReducer(key, reducer);
}
render() {
return <WrappedComponent {...this.props} />;
}
}
Extended.contextType = ReactReduxContext;
return Extended;
};
export default withReducer;
Мой тест Функция
import React from 'react';
import { shallow } from 'enzyme';
import { identity } from 'lodash';
import { Provider } from 'react-redux';
import { withReducer } from '../withReducer';
import initializeStore from '../initializeStore';
const Component = jest.fn();
let store;
let ComponentWithReducer;
const reducer = identity;
beforeEach(() => {
store = initializeStore();
ComponentWithReducer = withReducer('test', reducer)(Component);
});
describe('withReducer', () => {
it('should propagate props', () => {
const props = { testProp: 'test' };
const renderedComponent = shallow(
<Provider store={store}>
<ComponentWithReducer {...props} />
</Provider>, {
context: { store },
},
);
expect(renderedComponent.dive().props()).toEqual(props); // works
// how test render() return here
// how to test that store.injectReducer(key, reducer) was called here
});
});