Enzyme — это мощный инструмент для тестирования компонентов React,
который предоставляет удобные методы для взаимодействия с компонентами и
их DOM-структурами. Одним из таких методов является
parent(), предназначенный для нахождения родительского
элемента в дереве компонентов.
Метод parent() используется для получения первого
родительского компонента (или DOM-элемента) относительно выбранного
компонента или DOM-узла. Он возвращает экземпляр обёртки Enzyme, которая
позволяет продолжить манипулирование и тестирование родительского
элемента.
wrapper.parent();
wrapper — это обёртка Enzyme, которая
представляет компонент или DOM-элемент, с которым осуществляется
взаимодействие.Для демонстрации использования метода parent() возьмём
простой компонент React:
import React from 'react';
const Child = () => (
<div className="child">
<p>Я дочерний элемент</p>
</div>
);
const Parent = () => (
<div className="parent">
<Child />
</div>
);
Теперь, для того чтобы получить родительский элемент компонента
Child, можно воспользоваться методом parent()
в тестах:
import { shallow } from 'enzyme';
import Parent from './Parent';
import Child from './Child';
describe('Parent and Child', () => {
it('находит родительский элемент', () => {
const wrapper = shallow(<Parent />);
const childWrapper = wrapper.find(Child);
// Получаем родителя компонента Child
const parentWrapper = childWrapper.parent();
expect(parentWrapper.hasClass('parent')).toBe(true);
});
});
В данном примере:
Parent, который рендерит компонент
Child.find() для поиска компонента
Child внутри родительского компонента.parent() используется для поиска родительского
компонента, который в данном случае имеет класс
parent.parent,
используя метод hasClass().parent() возвращает только первого
родителя, то есть если элемент имеет несколько уровней
вложенности, только ближайший родитель будет возвращён.parent()
несколько раз, переходя по цепочке родителей.const grandparentWrapper = childWrapper.parent().parent();
Метод parent() фокусируется только на ближайшем
родителе. Для более сложных взаимодействий с деревом DOM или
компонентами, таких как поиск всех родителей или любых элементов, можно
использовать другие методы Enzyme, такие как parents() или
closest(). Например:
parents() — возвращает все
родительские элементы, начиная с самого ближайшего и заканчивая корнем
документа.closest() — позволяет найти
родительский элемент, соответствующий определённому селектору, начиная с
текущего элемента и переходя вверх по дереву.Метод parent() полезен, когда требуется только ближайший
родитель, и когда другие методы не нужны для более сложных операций.
Использование с .find(): Метод
parent() чаще всего используется в сочетании с
.find(), когда необходимо сначала найти какой-либо элемент
в компоненте, а затем получить его родителя. Это особенно удобно при
тестировании вложенных компонентов.
Проверка наличия родителя: Метод
parent() можно использовать для проверки, что элемент
действительно находится внутри определённого родителя. Это может быть
полезно для тестирования правильности структуры компонента.
Уровень вложенности: Если необходимо найти
родителя через несколько уровней вложенности, можно использовать
parent() несколько раз или воспользоваться методом
parents() для получения всех родителей.
Метод parent() в Enzyme — это простой, но мощный
инструмент для получения родительского элемента в дереве компонентов или
DOM. Он помогает при тестировании и проверке правильности структуры
вложенных компонентов в React-приложениях.