Как протестировать компонент, завернутый в HOC?

У меня есть HOC, который отображает завернутый компонент только тогда, когда isEntityValid() имеет значение true:

export default WrappedComponent => {
  return class EntityConsumer extends Component {
    render() {
      return isEntityValid() && <WrappedComponent {...this.props} />;
    }
  };
};

оператор export default моего обернутого компонента выглядит так:

export default withEnity(SomeComponent);

SomeComponent были написаны модульные тестовые примеры, прежде чем я добавил withEnity HOC,

  const wrapper = shallow(<SomeComponent {...props} />);
  const doneButton = wrapper.find(".footer_button");

как мне настроить тест, чтобы они все равно проходили?:

Зависит от того, что такое EntityValid. Вы можете либо протестировать обернутый компонент, либо имитировать withEnity и протестировать компонент и withEnity отдельно.

Estus Flask 25.02.2019 21:30

@estus Я хочу поиздеваться над Enity и протестировать один и тот же компонент отдельно, можете ли вы показать мне, как это сделать?

assiegee 25.02.2019 21:34

Они в разных модулях, не так ли? Затем jestjs.io/docs/en/manual-mocks.html

Estus Flask 25.02.2019 21:36

Они не находятся в разных модулях.

assiegee 25.02.2019 21:40

Тогда вы не сможете над ним издеваться. Как я уже сказал, способ его тестирования зависит от того, что такое isEntityValid.

Estus Flask 25.02.2019 21:45

@estus Что, если isEnityValid является вспомогательной функцией в другом файле в моей файловой структуре?

assiegee 25.02.2019 21:54

Тогда вы, вероятно, захотите издеваться над ним, чтобы сделать модульный тест более изолированным.

Estus Flask 25.02.2019 21:55

если вы убедитесь, что isEntityValid() возвращает true (возможно, издеваясь над чем-то, на что isEntityValid сам полагается / на что ссылается), вы можете получить доступ к WrappedComponent по wrapper.dive(). но гораздо проще просто экспортировать развернутую версию отдельно

skyboyer 26.02.2019 16:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
8
764
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вот как я обычно делаю свои собственные hocs:

export default WrappedComponent => {
  class EntityConsumer extends Component {
    render() {
      return isEntityValid() && <WrappedComponent {...this.props} />;
    }
  };
  EntityConsumer.WrappedComponent = WrappedComponent;
  return EntityConsumer;
};

Затем позже на тесте вы можете

const wrapper = shallow(<SomeComponent.WrappedComponent {...props} />);
const doneButton = wrapper.find(".footer_button");
Ответ принят как подходящий

Вы также можете экспортировать развернутый компонент

export default withEnity(SomeComponent);
export { SomeComponent as PureSomeComponent };

А затем протестируйте его в развернутом виде

Import { PureSomeComponent as SomeComponent};

Другие вопросы по теме