Поскольку приложения становятся более сложными, чем когда-либо, важно тестировать их автоматически. Мы можем сделать это с помощью модульных тестов, и тогда нам не придется все тестировать вручную.
В этой статье мы рассмотрим, как тестировать приложения Vue 3, написав простое приложение и протестировав его.
Начало работы с тестированием
Мы можем начать тестирование, создав проект с помощью Vue CLI.
Мы добавляем опцию «модульное тестирование» при создании проекта.
Затем будут добавлены файлы и настройки для создания и запуска модульных тестов.
Мы должны увидеть папку tests с тестовыми файлами.
Теперь мы можем создать наш собственный тест, написав:
import { mount } from '@vue/test-utils'
const MessageComponent = {
template: '<p>{{ msg }}</p>',
props: ['msg'],
}
test('displays message', () => {
const wrapper = mount(MessageComponent, {
props: {
msg: 'Hello world'
}
})
expect(wrapper.text()).toContain('Hello world')
})
Затем мы можем запустить npm run test:unit, чтобы запустить тест.
Мы должны увидеть галочку, поскольку «Hello World» отображается как опора.
Мы вызываем mount, чтобы установить MessageComponent.
И у props есть реквизит.
Затем мы вызываем wrapper.text, чтобы получить текст визуализированного компонента.
test принимает строку с описанием теста, а обратный вызов имеет тестовый код.
Условный рендеринг
Мы можем протестировать условный рендеринг, как в первом примере.
Например, мы можем написать:
import { mount } from '@vue/test-utils'
const Nav = {
template: `
<nav>
<a id="profile" href="/profile">Profile</a>
<a v-if="admin" id="admin" href="/admin">Admin</a>
</nav>
`,
data() {
return {
admin: false
}
}
}
test('displays profile', () => {
const wrapper = mount(Nav)
const profileLink = wrapper.get('#profile')
expect(profileLink.text()).toEqual('Profile')
})
У нас есть компонент Nav, и мы получаем элемент с идентификатором profile и wrapper.get.
Затем получаем текст методом text.
Мы можем проверить, существует ли элемент с данным селектором, с помощью:
import { mount } from '@vue/test-utils'
const Nav = {
template: `
<nav>
<a id="profile" href="/profile">Profile</a>
<a v-if="admin" id="admin" href="/admin">Admin</a>
</nav>
`,
data() {
return {
admin: false
}
}
}
test('displays profile', () => {
const wrapper = mount(Nav)
const profileLink = wrapper.get('#profile')
expect(profileLink.text()).toEqual('Profile')
})
test('does not render an admin link', () => {
const wrapper = mount(Nav)
expect(wrapper.find('#admin').exists()).toBe(false)
})
wrapper.find(‘#admin’).exists() пытается найти элемент с заданным селектором.
Кроме того, мы можем передать наши собственные данные, чтобы изменить значение реактивного свойства admin и протестировать его:
import { mount } from '@vue/test-utils'
const Nav = {
template: `
<nav>
<a id="profile" href="/profile">Profile</a>
<a v-if="admin" id="admin" href="/admin">Admin</a>
</nav>
`,
data() {
return {
admin: true
}
}
}
test('renders an admin link', () => {
const wrapper = mount(Nav, {
data() {
return {
admin: true
}
}
})
expect(wrapper.get('#admin').text()).toEqual('Admin')
})
Мы передаем нашу собственную data функцию в тест, поэтому мы устанавливаем admin на true.
А теперь мы можем проверить, отображается ли текст Admin вместе со ссылкой.
Заключение
Мы можем протестировать визуализированные компоненты Vue 3 с помощью Vue Test Utils.