Vue Test Utils (VTU) является официальным инструментом для тестирования компонентов Vue. Он предоставляет API для рендеринга компонентов, взаимодействия с ними и проверки состояния. Для полноценного тестирования компонентов необходим интегрированный тестовый фреймворк, такой как Jest, Vitest или Mocha, каждый из которых имеет свои особенности и требования к настройке.
Совместимость с Vue Test Utils VTU поддерживает работу с любым современным тестовым раннером, но важно учитывать поддержку ES-модулей, TypeScript и интеграцию с DOM-средой. Jest и Vitest из коробки предоставляют среду, имитирующую браузер через JSDOM, что упрощает тестирование компонентов с DOM-операциями.
Скорость выполнения тестов
Интеграция с TypeScript
ts-jest или нативно, соответственно.ts-node и дополнительных
плагинов, что увеличивает сложность конфигурации.Расширяемость и экосистема
@testing-library/jest-dom, снапшоты и мокирование
модулей.npm install --save-dev jest @vue/test-utils vue-jest babel-jest @babel/preset-env
jest.config.js)module.exports = {
preset: '@vue/cli-plugin-unit-jest/presets/default',
transform: {
'^.+\\.vue$': 'vue-jest',
'^.+\\.js$': 'babel-jest'
},
moduleFileExtensions: ['js', 'json', 'vue'],
testEnvironment: 'jsdom',
collectCoverage: true,
coverageReporters: ['text', 'lcov'],
};
Особенности использования
npm install --save-dev vitest @vue/test-utils vue @vitejs/plugin-vue
vite.config.js для
тестовimport { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [vue()],
test: {
globals: true,
environment: 'jsdom',
setupFiles: './vitest.setup.js',
coverage: {
reporter: ['text', 'lcov'],
},
},
});
vitest.setup.jsimport '@testing-library/jest-dom';
Особенности использования
npm install --save-dev mocha @vue/test-utils jsdom-global chai sinon
mocha.opts--require jsdom-global/register
--require @babel/register
--reporter spec
--recursive
Особенности использования
expect,
should).Монтирование компонентов:
import { mount } from '@vue/test-utils';
import MyComponent from '@/components/MyComponent.vue';
const wrapper = mount(MyComponent, {
props: { title: 'Пример' },
});Проверка рендеринга:
expect(wrapper.text()).toContain('Пример');Взаимодействие с компонентом:
await wrapper.find('button').trigger('click');
expect(wrapper.emitted()).toHaveProperty('click');Использование моков:
const wrapper = mount(MyComponent, {
global: {
mocks: {
$t: (msg) => msg
}
}
});Настройка фреймворка напрямую влияет на производительность тестов и удобство интеграции с Vue Test Utils. Выбор должен учитывать размер проекта, стек технологий и требуемый уровень автоматизации тестирования.