Vue Test Utils предоставляет удобные методы для поиска элементов в
компоненте с использованием селекторов. Основными инструментами для
этого являются методы find и
findAll. Они позволяют работать с DOM
внутри тестируемого компонента и обеспечивают контроль над поведением
компонентов на уровне представления.
findМетод find используется для поиска первого
совпадения по заданному селектору. Селектор может быть:
.my-class#my-idbutton, inputMyComponentСинтаксис:
const wrapper = mount(MyComponent);
const element = wrapper.find('.my-class');
Метод возвращает объект Wrapper, даже если элемент не
найден. В этом случае метод возвращает пустой wrapper,
для которого можно проверить свойство exists():
expect(element.exists()).toBe(true);
Особенности find:
text(), html(),
attributes() и другие на найденном элементе:expect(element.text()).toBe('Отправить');
expect(element.attributes('type')).toBe('button');
findAllМетод findAll используется для поиска всех
совпадений по заданному селектору. Он возвращает объект
WrapperArray, содержащий все найденные элементы.
Синтаксис:
const wrapper = mount(MyComponent);
const elements = wrapper.findAll('.item');
Особенности findAll:
WrapperArray длиной 0).expect(elements).toHaveLength(3);
expect(elements[0].text()).toBe('Первый элемент');
forEach:elements.forEach(item => {
expect(item.classes()).toContain('item');
});
WrapperArray поддерживают все методы,
доступные для одиночного Wrapper.При тестировании Vue-компонентов важно выбирать селекторы с учетом устойчивости к изменениям разметки:
data-test="submit-button":const button = wrapper.find('[data-test="submit-button"]');
expect(button.exists()).toBe(true);
:nth-child) или
нестабильным классам, так как они могут ломаться при изменении
стилей.Пример с кнопкой и событием:
const wrapper = mount(MyComponent);
const button = wrapper.find('button');
button.trigger('click');
expect(wrapper.emitted('submit')).toBeTruthy();
Пример с списком элементов:
const wrapper = mount(MyComponent, {
props: { items: ['A', 'B', 'C'] }
});
const listItems = wrapper.findAll('li');
expect(listItems).toHaveLength(3);
expect(listItems[1].text()).toBe('B');
Комбинированный поиск по компоненту и селектору:
const wrapper = mount(ParentComponent);
const child = wrapper.findComponent(ChildComponent).find('.child-element');
expect(child.exists()).toBe(true);
find и
findAll| Метод | Результат | При отсутствии совпадений |
|---|---|---|
find |
Wrapper (первое совпадение) | Пустой Wrapper (exists() → false) |
findAll |
WrapperArray (все совпадения) | Пустой WrapperArray (длина 0) |
find удобен для точечного поиска одного элемента.findAll используется для проверки множественных
элементов, циклической обработки или подсчета количества.Для проверки найденных элементов применяются методы:
exists() — существует ли элементtext() — текстовое содержимоеattributes() — атрибуты элементаclasses() — список классовconst element = wrapper.find('.alert');
expect(element.exists()).toBe(true);
expect(element.text()).toContain('Ошибка');
expect(element.classes()).toContain('alert-danger');
findAll и перебор
forEach.Методы find и findAll являются
фундаментальными инструментами для работы с DOM в Vue Test Utils,
позволяя точно находить элементы, проверять их свойства и
взаимодействовать с ними в тестах.