4.7 Тестовые утилиты
Импорт:
import ReactTestUtils from 'react-dom/test-utils'; // ES6
var ReactTestUtils = require('react-dom/test-utils'); // ES5 с npm
ReactTestUtils упрощает тестирование компонентов React в
выбранном вами фреймворке тестирования. В Facebook используется
Jest для безболезненного тестирования JavaScript. Узнайте, как
начать работу с Jest на сайте
.
Замечание.
Airbnb выпустила утилиту тестирования Enzyme, которая позволяет легко утверждать, манипулировать и перемещать выходные данные React-компонентов. Если вы решили, что применение модульного тестирования с использованием Jest или любого другого инструмента окажется полезным, вам стоит посмотреть: http://airbnb.io/enzyme/
SimulaterenderIntoDocument()mockComponent()isElement()isElementOfType()isDOMComponent()isCompositeComponent()isCompositeComponentWithType()findAllInRenderedTree()scryRenderedDOMComponentsWithClass()findRenderedDOMComponentWithClass()scryRenderedDOMComponentsWithTag()findRenderedDOMComponentWithTag()scryRenderedComponentsWithType()findRenderedComponentWithType()
4.7.2.1 Поверхностный отрисовщик
При написании модульных тестов для React может оказаться полезным неглубокая отрисовка. Неглубокая отрисовка позволяет отрисовывать компонент «на один уровень глубины» и утверждать то, что возвращает его метод отрисовки, не беспокоясь о поведении дочерних компонентов, которые не создаются или не отображаются. Это не требует DOM.
Замечание.
Неглубокая отрисовка перемещена вreact-test-renderer/shallow. Подробнее о поверхностной
отрисовке читайте
на странице справки
.
4.7.2.2 Другие утилиты
Simulate
Simulate.{eventName}(
element,
[eventData]
)
Имитирует отправку событий на узле DOM с дополнительными данными события eventData.
У Simulate есть метод для каждого события, которое понимает React.
Клик события
// <button ref={(node) => this.button = node}>...</button>
const node = this.button;
ReactTestUtils.Simulate.click(node);
Изменения значения текстового поля ввода и последующее нажатие ENTER
// <input ref={(node) => this.textInput = node} />
const node = this.textInput;
node.value = 'giraffe';
ReactTestUtils.Simulate.change(node);
ReactTestUtils.Simulate.keyDown(node, {key: "Enter", keyCode: 13, which: 13});
Замечание.
Вам необходимо будет предоставить любое свойство события, которое вы используете в своем компоненте (например,keyCode, which и т. Д.), поскольку React
не создает для вас никакие из них.
renderIntoDocument()
renderIntoDocument(element)
Отрисовывает элемент React в отдельный узел DOM в документе. Для этой функции требуется DOM.
Замечание.
Вам нужно будет иметь window,window.document и window.document.createElement
доступными глобально перед импортом React. В противном случае React будет думать,
что он не может получить доступ к DOM, и методы, подобные setState, не будут работать.
mockComponent()
mockComponent(
componentClass,
[mockTagName]
)
Передайте mock-компонент в этот метод, чтобы расширить его с помощью
полезных методов, которые позволяют использовать его в качестве фиктивного
компонента React. Вместо отрисовки, как обычно, компонент станет простым
<div> (или другим тегом, если предоставляется mockTagName), содержащим
все предоставленные потомки.
Замечание.
mockComponent() - устаревший API. Вместо этого рекомендуем использовать
jest.mock().
isElement()
isElement(element)
Возвращает true, если element является элементом React.
isElementOfType()
isElementOfType(
element,
componentClass
)
Возвращает true, если element является элементом React,
тип которого является componentClass.
isDOMComponent()
isDOMComponent(instance)
Возвращает true, если instance является компонентом
DOM (например, <div> или <span>).
isCompositeComponent()
isCompositeComponent(instance)
Возвращает true, если instance является определённым пользователем
компонентом, таким как класс или функция.
isCompositeComponentWithType()
isCompositeComponentWithType(
instance,
componentClass
)
Возвращает true, если instance - это компонент, тип которого
относится к componentClass.
findAllInRenderedTree()
findAllInRenderedTree(
tree,
test
)
Проходит все компоненты в tree и аккумулирует все компоненты, где test(component)
является true. Это не так полезно само по себе, но используется для других тестовых утилит.
scryRenderedDOMComponentsWithClass()
scryRenderedDOMComponentsWithClass(
tree,
className
)
Находит все DOM-элементы компонентов в отрисованном дереве, которые
являются компонентами DOM с именем класса, соответствующим className.
findRenderedDOMComponentWithClass()
findRenderedDOMComponentWithClass(
tree,
className
)
Подобно scryRenderedDOMComponentsWithClass(), но ожидает, что будет
один результат, и вернет его или выдаст исключение, если количество совпадений больше одного.
scryRenderedDOMComponentsWithTag()
scryRenderedDOMComponentsWithTag(
tree,
tagName
)
Находит все DOM-элементы компонентов в отрисованном дереве,
которые являются компонентами DOM с именем тега, соответствующим tagName.
findRenderedDOMComponentWithTag()
findRenderedDOMComponentWithTag(
tree,
tagName
)
Подобно scryRenderedDOMComponentsWithTag(), но ожидает, что будет один результат, и вернет
его или выдаст исключение, если количество совпадений больше одного.
scryRenderedDOMComponentsWithType()
scryRenderedDOMComponentsWithType(
tree,
componentClass
)
Находит все экземпляры компонентов с типом, равным componentClass.
findRenderedDOMComponentWithType()
findRenderedDOMComponentWithType(
tree,
componentClass
)
Подобно scryRenderedDOMComponentsWithType(), но ожидает, что будет один результат,
и вернет его или выдаст исключение, если количество совпадений больше одного.
