We want to hear from you!Take our 2021 Community Survey!
Ta witryna nie jest już aktualizowana.Przejdź do react.dev

Shallow Renderer

Importowanie

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

Ogólne informacje

Podczas pisania testów jednostkowych dla kodu reactowego przydatne może okazać się renderowanie płytkie (ang. shallow rendering). Pozwala ono na wyrenderowanie komponentu “jeden poziom w głąb” i wykonanie asercji na zwróconym drzewie, bez obaw o efekty uboczne komponentów potomnych, które wcale nie są tworzone i renderowane. Proces ten nie wymaga obecności drzewa DOM.

Załóżmy, że mamy do czynienia z następującym komponentem:

function MyComponent() {
  return (
    <div>
      <span className="heading">Tytuł</span>
      <Subcomponent foo="bar" />
    </div>
  );
}

Można dla niego napisać taki oto test:

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

// w teście:
const renderer = new ShallowRenderer();
renderer.render(<MyComponent />);
const result = renderer.getRenderOutput();

expect(result.type).toBe('div');
expect(result.props.children).toEqual([
  <span className="heading">Tytuł</span>,
  <Subcomponent foo="bar" />
]);

Testowanie płytkie posiada obecnie pewne ograniczenia, jak choćby brak wsparcia dla referencji (ang. refs) komponentów.

Uwaga:

Zalecamy również zapoznanie się z interefejsem API do płytkiego renderowania biblioteki Enzyme. Dostarcza ona tę samą funkcjonalność, jednak ma wygodniejszy i bardziej wysokopoziomowy interfejs.

Dokumentacja

shallowRenderer.render()

shallowRenderer jest “miejscem”, w którym można wyrenderować testowany komponent i otrzymać zwracaną przez niego strukturę.

shallowRenderer.render() w działaniu przypomina root.render(), jednak nie wymaga obecności drzewa DOM, a ponadto renderuje tylko jeden poziom struktury. Oznacza to, iż doskonale nadaje się do testowania komponentów w izolacji, bez brania pod uwagę implementacji komponentów potomnych.

shallowRenderer.getRenderOutput()

Po wywołaniu shallowRenderer.render() należy użyć shallowRenderer.getRenderOutput(), aby otrzymać płasko wyrenderowaną strukturę.

Można na niej wykonywać dowolne asercje.

Is this page useful?Edytuj tę stronę