Vue Test Utils предоставляет мощные инструменты для тестирования компонентов Vue, среди которых особое место занимает возможность поиска элементов внутри компонента. Поиск по текстовому содержимому позволяет точно проверять, что компонент отображает нужную информацию, не ограничиваясь селекторами CSS или атрибутами.
Для работы с текстом в Vue Test Utils используются методы
find, findAll, а также специальные проверки
через text().
findМетод find позволяет выбрать первый элемент,
соответствующий заданному селектору. При этом текст элемента можно
получить через метод text():
import { mount } from '@vue/test-utils'
import MyComponent from '@/components/MyComponent.vue'
const wrapper = mount(MyComponent)
// Получение первого абзаца по селектору
const paragraph = wrapper.find('p')
// Проверка текста
expect(paragraph.text()).toBe('Привет, мир!')
findAllМетод findAll возвращает коллекцию всех элементов,
соответствующих селектору, что удобно для поиска элементов с одинаковой
структурой, но разным содержимым:
const items = wrapper.findAll('li')
items.forEach(item => {
console.log(item.text())
})
Vue Test Utils не поддерживает прямой поиск по тексту без селектора.
Для таких случаев применяется комбинация findAll и
фильтрации через метод filter:
const items = wrapper.findAll('li')
const itemWithText = items.filter(item => item.text() === 'Нужный текст')[0]
expect(itemWithText.exists()).toBe(true)
Ключевой момент: text() возвращает
объединённый текст всех потомков элемента, поэтому поиск по частичному
совпадению удобно делать с includes:
const itemWithSubstring = items.find(item => item.text().includes('Частичный текст'))
expect(itemWithSubstring.exists()).toBe(true)
Для компонентов, где текст зависит от props или состояния, важно
использовать асинхронные проверки и await nextTick(), чтобы
убедиться, что DOM обновился:
import { nextTick } from 'vue'
const wrapper = mount(MyComponent, {
props: { message: 'Первое сообщение' }
})
// Обновляем prop
await wrapper.setProps({ message: 'Обновлённое сообщение' })
await nextTick()
expect(wrapper.text()).toContain('Обновлённое сообщение')
Вывод: поиск по тексту эффективно сочетается с реактивными обновлениями компонента, позволяя проверять финальное отображение данных.
Для точного выбора элементов удобно комбинировать селекторы и проверку текста:
const button = wrapper.findAll('button')
.find(btn => btn.text() === 'Отправить')
expect(button.exists()).toBe(true)
Такой подход особенно полезен для форм с несколькими кнопками одинакового класса.
button, h1, p) вместо
классов, чтобы тесты были менее зависимы от стилей.data-testid) для сложных компонентов, где текст может
изменяться динамически.В случаях, когда текст разбит на несколько элементов, удобно
использовать text() на родительском контейнере:
const container = wrapper.find('.message-container')
expect(container.text()).toContain('Часть текста')
expect(container.text()).toContain('Другая часть')
Метод text() объединяет весь видимый текст, игнорируя
вложенные элементы, что делает проверку удобной для сложных
шаблонов.
Для поиска по тексту с возможными вариациями применяется поддержка регулярных выражений:
const header = wrapper.find('h1')
expect(header.text()).toMatch(/Привет, \w+/)
Регулярные выражения позволяют проверять динамический текст, не привязываясь к точной строке.
find или
findAll.text().await nextTick()
после изменений состояния или props.Поиск элементов по тексту в Vue Test Utils является основой для
проверки содержимого компонента. Правильное использование
text(), фильтров и асинхронных обновлений позволяет
создавать надёжные и поддерживаемые тесты.