тестирование нескольких HOC, составленных с помощью recompose

#reactjs #snapshot #recompose #react-test-renderer

#reactjs #снимок #перекомпозировать #react-test-средство визуализации

Вопрос:

У меня есть настройка, в которой у меня есть основной контейнер, состоящий из нескольких HOC с использованием recompose.

Используемые HOC;

WithPageWrapper, с загрузкой, с ошибкой

Составлено так:

 compose(
    withPageWrapper,
    withLoading,
    withError
)(MainContainer)
 

тестирование этой логики оказывается сложным. Проект, над которым я работаю, использует react-test-renderer и использует метод мелкого рендеринга.

Поэтому при тестировании моментального снимка, чтобы убедиться, что загружается состояние ошибки, моментальный снимок проверяет только один уровень глубины (из-за мелкого рендеринга) и всегда возвращает:

 <PageWrapper>
    <LoadingContainer>
    </LoadingContainer>
</PageWrapper>
 

Вместо этого я хочу видеть в моментальном снимке:

 <PageWrapper>
    <ErrorContainer>
    </ErrorContainer>
</PageWrapper>
 

как я и ожидал, Loading HOC просто отобразит основной контейнер, поскольку загрузочный реквизит равен null или false.

Выполнение полного рендеринга вместо мелкого рендеринга просто делает снимок почти нечитаемым. Есть ли способ использовать мелкий рендеринг в react-test-renderer и протестировать состав нескольких HOC?

Ответ №1:

Все используемые специальные функции могут быть смоделированы с помощью некоторой базовой реализации, такой как

 jest.fn().mockImplementation(Comp => props => (
  <div data-testid="FooHOC"><Comp ...props/></div>
));
 

это позволяет эффективно утверждать результаты в моментальном снимке.

Эффекты оригинальных функций HOC можно протестировать в специальных тестах.

Комментарии:

1. Так что я все еще не совсем понимаю это. Нужно ли мне издеваться над каждым HOC, а затем выполнять исходный мелкий рендеринг для сравнения со снимком? Наверное, я просто не уверен, как издевательство поможет решить проблему использования мелкого рендеринга

2. Цель этого — выполнить полный рендеринг и получить чистый и предсказуемый снимок.