Как я могу проверить HO C на шутку? - PullRequest
0 голосов
/ 30 марта 2020

Я написал 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
  });
});

1 Ответ

0 голосов
/ 30 марта 2020

Вы можете смоделировать injectReducer функцию в магазине:

const props = { testProp: 'test' };

const mockFn = jest.fn();

const renderedComponent = shallow(
  <Provider store={{ injectReducer: mockFn }}>
    <ComponentWithReducer {...props} />
  </Provider>, {
    context: { store },
  },
);

expect(mockFn).toHaveBeenCalled();
expect(mockFn).toHaveBeenCalledWith('test', reducer);
...