Jest — это популярный тестовый фреймворк для JavaScript, который обеспечивает простое написание и выполнение юнит-тестов для Vue.js 3. В этой статье мы рассмотрим процесс настройки Jest и написания юнит-тестов для Vue.js 3 с использованием Vue Test Utils.
Установка и настройка Jest
Для начала установите необходимые зависимости, выполнив следующие команды:
npm install --save-dev jest @vue/test-utils vue-jest babel-jest
Создайте файл конфигурации jest.config.js
в корне вашего проекта:
module.exports = {
preset: '@vue/cli-plugin-unit-jest',
transform: {
'^.+\\.vue$': 'vue-jest',
},
};
Тестирование компонентов
Для тестирования компонентов Vue.js мы будем использовать библиотеку Vue Test Utils. Рассмотрим пример тестирования простого компонента:
// src/components/Message.vue
<template>
<div>{{ message }}</div>
</template>
<script>
export default {
props: ['message'],
};
</script>
Создайте файл теста Message.spec.js
:
import { shallowMount } from '@vue/test-utils';
import Message from '@/components/Message.vue';
describe('Message.vue', () => {
it('renders props.message when passed', () => {
const message = 'Hello Jest!';
const wrapper = shallowMount(Message, {
propsData: { message },
});
expect(wrapper.text()).toMatch(message);
});
});
Запустите тест, выполнив команду npm run test
.
Тестирование методов и событий компонентов
Тестирование методов и событий компонентов также важно для обеспечения корректной работы приложения. Рассмотрим пример компонента с методом и пользовательским событием:
// src/components/Button.vue
<template>
<button @click="handleClick">Click me</button>
</template>
<script>
export default {
methods: {
handleClick() {
this.$emit('clicked');
},
},
};
</script>
Создайте файл теста Button.spec.js
:
import { shallowMount } from '@vue/test-utils';
import Button from '@/components/Button.vue';
describe('Button.vue', () => {
it('calls handleClick when button is clicked', () => {
const handleClick = jest.fn();
const wrapper = shallowMount(Button);
wrapper.setMethods({ handleClick });
wrapper.find('button').trigger('click');
expect(handleClick).toHaveBeenCalled();
});
it('emits "clicked" event when button is clicked', () => {
const wrapper = shallowMount(Button);
wrapper.find('button').trigger('click');
expect(wrapper.emitted('clicked')).toBeTruthy();
});
});
Тестирование Vuex
Для тестирования Vuex-модулей также можно использовать Jest. Рассмотрим пример тестирования простого модуля Vuex:
// src/store/modules/counter.js
export default {
state: {
count: 0,
},
mutations: {
increment(state) {
state.count++;
},
},
actions: {
increment({ commit }) {
commit('increment');
},
},
};
Создайте файл теста counter.spec.js
:
import counterModule from '@/store/modules/counter';
describe('counter.js', () => {
it('increments count in state', () => {
const state = {
count: 0,
};
counterModule.mutations.increment(state);
expect(state.count).toBe(1);
});
it('commits increment mutation', () => {
const commit = jest.fn();
counterModule.actions.increment({ commit });
expect(commit).toHaveBeenCalledWith('increment');
});
});
Запустите тест, выполнив команду npm run test
.
Заключение
Jest и Vue Test Utils являются мощными инструментами для написания юнит-тестов Vue.js 3. В этой статье мы рассмотрели процесс настройки Jest и написания тестов для компонентов, методов, событий и Vuex-модулей. Эти примеры кода и подходы помогут вам улучшить качество своего кода и обеспечить стабильность вашего приложения на Vue.js 3.