Vue.js
Vue.js - це зручний, продуктивний та універсальний фреймворк для створення веб-інтерфейсів. Ви можете тестувати компоненти Vue.js безпосередньо в реальному браузері за допомогою WebdriverIO та його браузерного запускача.
Налаштування
Щоб налаштувати WebdriverIO у вашому проекті Vue.js, дотримуйтеся інструкцій у нашій документації з тестування компонентів. Переконайтеся, що обрали vue як пресет у параметрах вашого запускача, наприклад:
// wdio.conf.js
export const config = {
// ...
runner: ['browser', {
preset: 'vue'
}],
// ...
}
Якщо ви вже використовуєте Vite як сервер розробки, ви також можете повторно використовувати вашу конфігурацію з vite.config.ts у вашій конфігурації WebdriverIO. Для отримання додаткової інформації див. viteConfig у опціях запускача.
Пресет Vue вимагає встановлення @vitejs/plugin-vue. Також ми рекомендуємо використовувати Testing Library для рендерингу компонента на тестовій сторінці. Для цього вам потрібно встановити наступні додаткові залежності:
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @testing-library/vue @vitejs/plugin-vue
yarn add --dev @testing-library/vue @vitejs/plugin-vue
pnpm add --save-dev @testing-library/vue @vitejs/plugin-vue
bun add --dev @testing-library/vue @vitejs/plugin-vue
Потім ви можете запустити тести за допомогою:
npx wdio run ./wdio.conf.js
Написання тестів
Припустимо, у вас є наступний компонент Vue.js:
<template>
<div>
<p>Times clicked: {{ count }}</p>
<button @click="increment">increment</button>
</div>
</template>
<script>
export default {
data: () => ({
count: 0,
}),
methods: {
increment() {
this.count++
},
},
}
</script>
У вашому тесті відрендеріть компонент у DOM і запустіть перевірки на ньому. Ми рекомендуємо використовувати або @vue/test-utils, або @testing-library/vue для підключення компонента до тестової сторінки. Для взаємодії з компонентом використовуйте команди WebdriverIO, оскільки вони поводяться більш наближено до реальних взаємодій користувача, наприклад:
- @vue/test-utils
- @testing-library/vue
import { $, expect } from '@wdio/globals'
import { mount } from '@vue/test-utils'
import Component from './components/Component.vue'
describe('Vue Component Testing', () => {
it('increments value on click', async () => {
// The render method returns a collection of utilities to query your component.
const wrapper = mount(Component, { attachTo: document.body })
expect(wrapper.text()).toContain('Times clicked: 0')
const button = await $('aria/increment')
// Dispatch a native click event to our button element.
await button.click()
await button.click()
expect(wrapper.text()).toContain('Times clicked: 2')
await expect($('p=Times clicked: 2')).toExist() // same assertion with WebdriverIO
})
})
import { $, expect } from '@wdio/globals'
import { render } from '@testing-library/vue'
import Component from './components/Component.vue'
describe('Vue Component Testing', () => {
it('increments value on click', async () => {
// The render method returns a collection of utilities to query your component.
const { getByText } = render(Component)
// getByText returns the first matching node for the provided text, and
// throws an error if no elements match or if more than one match is found.
getByText('Times clicked: 0')
const button = await $(getByText('increment'))
// Dispatch a native click event to our button element.
await button.click()
await button.click()
getByText('Times clicked: 2') // assert with Testing Library
await expect($('p=Times clicked: 2')).toExist() // assert with WebdriverIO
})
})
Ви можете знайти повний приклад набору тестів компонентів WebdriverIO для Vue.js у нашому репозиторії прикладів.