GitLab CI/CD предоставляет мощный механизм автоматизации процессов сборки, тестирования и деплоя приложений. Для проектов на Vue.js с использованием Vue Test Utils интеграция тестов в пайплайн позволяет поддерживать стабильность кода и предотвращать регрессии.
Для корректного запуска тестов необходимо убедиться, что структура проекта соответствует стандартам Vue CLI или Vite:
project/
├─ src/
├─ tests/
│ ├─ unit/
│ │ └─ Example.spec.js
├─ package.json
├─ vue.config.js
└─ jest.config.js
Ключевые зависимости для юнит-тестирования с Vue Test Utils:
"devDependencies": {
"@vue/test-utils": "^3.2.0",
"jest": "^29.0.0",
"babel-jest": "^29.0.0",
"vue-jest": "^29.0.0"
}
Файл jest.config.js должен включать настройку для работы
с Vue-компонентами:
module.exports = {
moduleFileExtensions: ['js', 'json', 'vue'],
transform: {
'^.+\\.vue$': 'vue-jest',
'^.+\\.js$': 'babel-jest'
},
testEnvironment: 'jsdom',
collectCoverage: true,
collectCoverageFrom: ['src/**/*.{js,vue}']
};
Файл .gitlab-ci.yml определяет этапы пайплайна. Для
тестирования Vue Test Utils достаточно создать отдельный job с этапом
test:
stages:
- test
variables:
NODE_ENV: test
NPM_CONFIG_CACHE: "$CI_PROJECT_DIR/.npm"
cache:
paths:
- node_modules/
test_unit:
stage: test
image: node:20
script:
- npm ci
- npm run test:unit
artifacts:
when: always
paths:
- coverage/
reports:
junit: junit.xml
Разбор конфигурации:
image: node:20 — использование официального
Docker-образа Node.js.npm ci — чистая установка зависимостей для стабильного
и повторяемого окружения.npm run test:unit — запуск тестов, обычно определяется
в package.json как:"scripts": {
"test:unit": "jest --coverage --runInBand"
}
artifacts и reports позволяют сохранять
результаты покрытия кода и отчёты в формате JUnit, которые GitLab может
отображать в интерфейсе пайплайна.Для проектов с Docker полезно создавать отдельный образ для тестирования. Пример Dockerfile для тестов:
FROM node:20
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["npm", "run", "test:unit"]
Это позволяет запускать тесты в локальной среде, идентичной CI, и избегать ошибок, связанных с различиями версий Node или зависимостей.
Параллельный запуск: для крупных проектов тесты
можно запускать в несколько потоков через --maxWorkers в
Jest.
"scripts": {
"test:unit": "jest --coverage --maxWorkers=4"
}Изоляция окружения: использование
--runInBand предотвращает проблемы с глобальными
состояниями при тестах компонентов Vue с Vuex или Vue Router.
Кеширование зависимостей: GitLab CI поддерживает
кеширование node_modules и .npm для ускорения
последующих сборок.
GitLab CI поддерживает публикацию отчетов о покрытии кода. Настройка
collectCoverage в Jest позволяет генерировать отчет,
который затем можно визуализировать:
artifacts:
when: always
paths:
- coverage/
reports:
cobertura: coverage/cobertura-coverage.xml
Jest поддерживает вывод отчёта в формате Cobertura:
"jest": {
"coverageReporters": ["json", "lcov", "cobertura"]
}
Это позволяет GitLab автоматически отображать информацию о проценте покрытия и изменениях в коде.
Vue Test Utils позволяет монтировать компоненты и проверять их поведение без запуска браузера:
import { mount } from '@vue/test-utils';
import Example from '@/components/Example.vue';
test('renders message correctly', () => {
const wrapper = mount(Example, {
props: { msg: 'Hello' }
});
expect(wrapper.text()).toContain('Hello');
});
При запуске в GitLab CI важно учитывать, что окружение не имеет
графического интерфейса, поэтому Jest использует jsdom для
эмуляции DOM. Это обеспечивает идентичное поведение тестов локально и на
CI.
vue, @vue/test-utils и vue-jest
совместимы.Cannot find module 'vue': чаще
всего возникает из-за отсутствия правильного кеширования
node_modules или некорректной установки пакетов.Эта интеграция обеспечивает полную автоматизацию процесса тестирования Vue-компонентов, формирует стандартизированные отчёты и повышает надёжность всего проекта на этапах CI/CD.