Enzyme — это библиотека для тестирования React-компонентов, предоставляющая мощные инструменты для рендеринга, поиска элементов и симуляции событий. Одним из ключевых аспектов работы с Enzyme является возможность получить исходный компонент для проверки его внутреннего состояния, пропсов или методов. Понимание механизмов получения компонента позволяет писать более точные и надежные тесты.
Enzyme предлагает три основных метода рендеринга компонентов:
shallow — поверхностный рендеринг:
import { shallow } from 'enzyme';
import MyComponent from './MyComponent';
const wrapper = shallow(<MyComponent />);mount — полный рендеринг:
import { mount } from 'enzyme';
const wrapper = mount(<MyComponent />);render — статический рендеринг:
import { render } from 'enzyme';
const wrapper = render(<MyComponent />);Для глубокого взаимодействия с компонентом (например, вызова методов
или проверки состояния) важно получить экземпляр
React-компонента. Это возможно только при использовании
mount.
instance():const wrapper = mount(<MyComponent />);
const instance = wrapper.instance();
instance.someMethod(); // вызов метода компонента
Особенности:
Enzyme предоставляет удобные методы для проверки пропсов и состояния компонента.
const wrapper = shallow(<MyComponent title="Test" />);
expect(wrapper.props().title).toBe('Test');
const wrapper = mount(<MyComponent />);
wrapper.setState({ count: 5 });
expect(wrapper.state('count')).toBe(5);
wrapper.setProps({ title: 'New Title' });
expect(wrapper.props().title).toBe('New Title');
Для точного получения нужного компонента внутри обертки используются методы поиска:
wrapper.find('button'); // все кнопки
wrapper.find(MyChildComponent); // все дочерние компоненты MyChildComponent
wrapper.find('.active'); // элементы с классом active
Эти методы позволяют детально проверять структуру компонента и его потомков.
Функциональные компоненты не имеют экземпляра класса, поэтому методы
instance() и state() неприменимы. Основные
подходы для работы:
shallow или mount.const wrapper = shallow(<MyComponent />);
wrapper.find('button').simulate('click');
expect(wrapper.find('.count').text()).toBe('1');
Методы mount и shallow позволяют управлять
жизненным циклом компонентов:
shallow:
wrapper.instance().componentDidMount() — можно вызвать
вручную.wrapper.update() — обновление после изменения пропсов
или состояния.mount:
componentDidUpdate,
componentWillUnmount.shallow.mount.instance() и state().Эти механизмы обеспечивают детальное управление и проверку компонентов в Enzyme, позволяя тестам быть как точными, так и устойчивыми к изменениям реализации.