Этот сайт больше не обновляется.Перейдите на react.dev

Поверхностный рендерер

Импорт

import ShallowRenderer from 'react-test-renderer/shallow'; // ES6
var ShallowRenderer = require('react-test-renderer/shallow'); // ES5 с npm

Обзор

Поверхностный рендеринг может быть полезным при модульном тестировании компонентов React. Он позволяет отрендерить компонент «на один уровень глубины», а затем проверить утверждения о том, что возвращает метод рендеринга. В этом случае вам не нужно волноваться о поведении дочерних компонентов, потому что они не инстанциируются и не рендерятся. Этот процесс не требует DOM.

Возьмём к примеру, следующий компонент:

function MyComponent() {
  return (
    <div>
      <span className="heading">Заглавие</span>
      <Subcomponent foo="bar" />
    </div>
  );
}

Тогда вы можете утверждать:

import ShallowRenderer from 'react-test-renderer/shallow';

// в вашем тесте:
const renderer = new ShallowRenderer();
renderer.render(<MyComponent />);
const result = renderer.getRenderOutput();

expect(result.type).toBe('div');
expect(result.props.children).toEqual([
  <span className="heading">Заглавие</span>,
  <Subcomponent foo="bar" />
]);

Поверхностное тестирование в настоящее время имеет некоторые ограничения — оно не поддерживает рефы.

Замечание:

Мы также советуем посмотреть API поверхностного рендеринга Enzyme Shallow Rendering API. Он предоставляет более удобный API высокого уровня для достижения той же функциональности.

Справка

shallowRenderer.render()

Вы можете думать о shallowRenderer как о «месте» в которое рендерится тестируемый компонент, и из которого вы можете извлечь результат вывода этого компонента.

shallowRenderer.render() схож с root.render(), но не требует DOM и рендерит всего один уровень глубины. Это означает что вы можете тестировать компоненты независимо от того, как реализованы их дочерние компоненты.

shallowRenderer.getRenderOutput()

После того как был вызван shallowRenderer.render(), вы можете извлечь поверхностно отрисованный результат с помощью shallowRenderer.getRenderOutput().

После этого можно начинать проверку утверждений о выводе.