Метод html() библиотеки Enzyme
используется для получения внутреннего HTML элемента или дерева
компонентов, смонтированных с помощью shallow,
mount или render. Он возвращает строку с HTML,
которая отражает текущее состояние компонента, включая все дочерние
элементы. Этот метод особенно полезен для проверки рендеринга
компонентов, сравнения с ожидаемой разметкой и отладки
тестов.
html()Возвращаемый тип Метод возвращает строку, содержащую HTML, полностью соответствующую текущему состоянию компонента.
import { shallow } from 'enzyme';
import MyComponent from './MyComponent';
const wrapper = shallow(<MyComponent />);
console.log(wrapper.html());
// Выведет HTML компонента в виде строкиСравнение с ожидаемым HTML Строку можно
использовать для прямого сравнения с заранее известной разметкой с
помощью toEqual или toContain.
expect(wrapper.html()).toEqual('<div class="container"><p>Hello World</p></div>');Работа с различными типами рендеринга
shallow() — метод возвращает только
HTML верхнего уровня компонента и его прямых дочерних элементов, не
рендеря глубоко вложенные компоненты.mount() — возвращает полный HTML с
полностью смонтированными дочерними компонентами.render() — генерирует HTML с
использованием Cheerio и предоставляет доступ к DOM-подобной структуре
для глубокого анализа.Shallow render и html():
import { shallow } from 'enzyme';
import Button from './Button';
const wrapper = shallow(<Button label="Click me" />);
console.log(wrapper.html());
// <button>Click me</button>
Mount render и html():
import { mount } from 'enzyme';
import App from './App';
const wrapper = mount(<App />);
console.log(wrapper.html());
// Включает HTML всех дочерних компонентов App
Использование для проверки динамических изменений:
import { mount } from 'enzyme';
import Counter from './Counter';
const wrapper = mount(<Counter />);
wrapper.find('button.increment').simulate('click');
expect(wrapper.html()).toContain('<span>1</span>');
html() от других методов Enzyme| Метод | Возвращаемый результат | Основное применение |
|---|---|---|
html() |
Строка с HTML | Проверка внутреннего HTML компонента |
text() |
Строка с текстом | Проверка видимого текста без тегов |
debug() |
Строка с отформатированным деревом | Отладка структуры компонента |
render() |
Cheerio-объект | Глубокий рендеринг и выборка элементов |
html() для сравнения статического
HTML компонентов.mount() и
html().html() для проверки функциональности —
лучше комбинировать с simulate() и find() для
имитации событий и проверки состояния.Сравнение с полностью жесткой строкой HTML может
меняться при обновлениях React, даже если функциональность сохраняется.
Лучше использовать toContain или регулярные выражения, чем
toEqual с длинной строкой.
Ожидание текста внутри дочерних компонентов при
shallow() shallow() не рендерит
глубоко вложенные компоненты, поэтому html() покажет только
верхний уровень. Для полного HTML следует использовать
mount() или render().
Неправильное сочетание с методами выборки
html() возвращает HTML всего выбранного узла. Если
использовать .find() перед html(), результат
будет ограничен выбранным элементом, а не всем деревом
компонента.
Метод html() отлично интегрируется с Jest для
snapshot-тестирования:
import { shallow } from 'enzyme';
import Header from './Header';
it('рендерит корректный HTML', () => {
const wrapper = shallow(<Header />);
expect(wrapper.html()).toMatchSnapshot();
});
Snapshot фиксирует HTML компонента и позволяет отслеживать изменения разметки при обновлениях кода.
html() является одним из наиболее удобных инструментов
Enzyme для точного контроля и анализа внутреннего HTML
компонентов, предоставляя разработчикам возможность проводить
глубокие проверки рендеринга и структуры без прямого взаимодействия с
DOM.