Quasar — это фреймворк на базе Vue.js, который предоставляет богатый набор инструментов для разработки приложений под веб, мобильные и десктопные платформы. Одной из критически важных практик разработки является тестирование кода, которое обеспечивает стабильность и предсказуемость работы приложения. В Quasar поддерживаются различные виды тестирования: юнит-тесты, интеграционные тесты и end-to-end (E2E) тесты.
Для организации тестирования Quasar использует стандартные
инструменты экосистемы Vue, такие как Jest для
юнит-тестов и Cypress для E2E. Встроенная CLI-команда
quasar test позволяет быстро запускать тесты и генерировать
отчёты о покрытии кода.
Юнит-тестирование фокусируется на тестировании отдельных компонентов или функций без зависимости от внешних сервисов. В Quasar каждый компонент — это Vue-компонент, и тестирование строится на проверке:
Пример структуры юнит-теста для компонента:
import { mount } from '@vue/test-utils';
import QButton from 'quasar/src/components/button/QButton.vue';
describe('QButton', () => {
it('должен отображать переданный label', () => {
const wrapper = mount(QButton, {
props: { label: 'Нажми меня' }
});
expect(wrapper.text()).toBe('Нажми меня');
});
it('вызывает событие click при нажатии', async () => {
const wrapper = mount(QButton);
await wrapper.trigger('click');
expect(wrapper.emitted()).toHaveProperty('click');
});
});
Ключевой момент: использование mount
позволяет полностью смонтировать компонент в виртуальном DOM, что важно
для проверки взаимодействия с шаблоном и реактивными свойствами.
Интеграционные тесты проверяют работу нескольких компонентов и сервисов вместе, включая Vuex и роутер Quasar. Их цель — убедиться, что связка компонентов работает корректно.
Пример интеграционного теста с Vuex:
import { mount } from '@vue/test-utils';
import { createStore } from 'vuex';
import MyComponent from 'src/components/MyComponent.vue';
const store = createStore({
state() {
return { counter: 0 };
},
mutations: {
increment(state) {
state.counter++;
}
}
});
describe('MyComponent', () => {
it('увеличивает счетчик при нажатии кнопки', async () => {
const wrapper = mount(MyComponent, {
global: { plugins: [store] }
});
await wrapper.find('button').trigger('click');
expect(store.state.counter).toBe(1);
});
});
Важно: для интеграционных тестов требуется
подключение глобальных плагинов Quasar, таких как Notify,
Dialog, Loading, чтобы поведение компонентов
соответствовало реальной работе приложения.
E2E-тестирование проверяет приложение целиком, включая
пользовательский интерфейс и взаимодействие с сервером. В Quasar
стандартом является Cypress, интегрируемый через
команду quasar test e2e.
Пример E2E-теста:
describe('Главная страница', () => {
it('должна показывать заголовок', () => {
cy.visit('/');
cy.get('h1').should('contain', 'Добро пожаловать в Quasar');
});
it('кнопка увеличивает счетчик', () => {
cy.get('button.increment').click();
cy.get('.counter').should('contain', '1');
});
});
Особенности E2E в Quasar:
quasar dev или quasar build.Покрытие кода показывает процент кода, который проверяется тестами. В Quasar для юнит-тестов используется Jest с инструментом istanbul, а для E2E — встроенные отчёты Cypress.
Пример настройки покрытия в package.json:
"jest": {
"collectCoverage": true,
"collectCoverageFrom": [
"src/components/**/*.{js,vue}",
"src/pages/**/*.{js,vue}"
],
"coverageReporters": ["html", "text-summary"]
}
Рекомендации по повышению покрытия:
if,
switch).shallowMount для
юнит-тестов, когда не требуется рендеринг дочерних компонентов, что
ускоряет тестирование.global.plugins при монтировании.Понимание и правильное применение этих техник позволяет поддерживать Quasar-приложения с высоким качеством кода, стабильностью и предсказуемостью поведения при изменениях.