Покрытие кода (code coverage) — один из ключевых индикаторов качества тестирования. Оно показывает, какая часть кода приложения действительно выполняется при запуске тестов. В экосистеме Vue.js для измерения покрытия широко используются такие инструменты, как Jest, Cypress, Karma в сочетании с Vue Test Utils.
Jest изначально поддерживает сбор данных о покрытии кода. Для интеграции с Vue Test Utils достаточно настроить конфигурацию:
// jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'json', 'vue'],
transform: {
'^.+\\.vue$': 'vue-jest',
'^.+\\.js$': 'babel-jest'
},
collectCoverage: true,
collectCoverageFrom: [
'src/**/*.{js,vue}',
'!src/main.js',
'!src/router/index.js'
],
coverageReporters: ['html', 'text-summary', 'lcov']
};
Ключевые моменты:
collectCoverage: true активирует сбор данных о
покрытии.collectCoverageFrom определяет файлы, которые
необходимо анализировать.coverageReporters позволяет выбирать формат отчётов:
интерактивный HTML, текстовый свод, lcov для интеграции с CI/CD.При запуске команды jest --coverage создаётся папка
coverage, где можно видеть детальную информацию о
строках, функциях и ветвлениях, покрытых тестами.
Vue Test Utils предоставляет методы, позволяющие изолированно тестировать компоненты и наблюдать за их поведением. Покрытие кода достигается за счёт:
mount или shallowMount:import { mount } from '@vue/test-utils';
import MyComponent from '@/components/MyComponent.vue';
test('отображение заголовка', () => {
const wrapper = mount(MyComponent);
expect(wrapper.text()).toContain('Заголовок');
});
wrapper.find('button').trigger('click');
expect(wrapper.emitted()).toHaveProperty('clicked');
wrapper.setData({ count: 5 });
expect(wrapper.vm.doubleCount).toBe(10);
Каждый из этих тестов генерирует покрытие соответствующих функций, ветвлений и выражений внутри компонента.
Для корректного измерения покрытия кода Vue необходимо использовать babel-plugin-istanbul:
// babel.config.js
module.exports = {
presets: ['@babel/preset-env'],
env: {
test: {
plugins: ['istanbul']
}
}
};
Это обеспечивает трассировку выполнения кода, включая
v-if, v-for и другие директивы Vue, что
позволяет инструментам покрытие учитывать даже шаблонные
конструкции.
nyc и
istanbul.karma-coverage генерирует отчёты в формате HTML или
lcov.if/else, тернарные операторы и switch.Комбинация этих показателей позволяет оценить полноту тестирования Vue-компонентов, включая методы, события, реактивные свойства и рендеринг шаблонов.
computed, watch и методах жизненного цикла
(mounted, created).Генерация отчётов покрытий должна быть интегрирована в процесс CI/CD:
Использование этих инструментов обеспечивает прозрачность тестового покрытия и позволяет поддерживать качество кода на высоком уровне в проектах Vue.js.
Покрытие кода — это не цель само по себе, но мощный индикатор, который вместе с Vue Test Utils помогает выявлять недоохваченные участки и гарантирует стабильность приложений.