Для начала необходимо установить Cypress в проект Quasar.
Используется стандартный менеджер пакетов npm или
yarn:
npm install cypress --save-dev
# или
yarn add cypress --dev
После установки можно открыть Cypress для первого запуска:
npx cypress open
В Quasar проекте рекомендуется интегрировать Cypress через
@quasar/cli, чтобы обеспечить корректную работу с
окружением Vue и Quasar-компонентами. Для этого создают папку
cypress в корне проекта, где будут храниться тесты и
конфигурационные файлы.
Файл конфигурации cypress.config.js позволяет задать
базовый URL, директории для тестов и скриншотов:
const { defineConfig } = require('cypress')
module.exports = defineConfig({
e2e: {
baseUrl: 'http://localhost:8080',
specPattern: 'cypress/e2e/**/*.cy.js',
supportFile: 'cypress/support/e2e.js',
screenshotsFolder: 'cypress/screenshots',
videosFolder: 'cypress/videos',
},
})
Тесты в Cypress обычно делятся на несколько типов:
Файлы тестов помещаются в папку cypress/e2e/ с
расширением .cy.js. Например:
cypress/
├─ e2e/
│ ├─ login.cy.js
│ ├─ dashboard.cy.js
│ └─ navigation.cy.js
cy.visit(url) – переход на указанный URL.cy.get(selector) – получение элемента по
CSS-селектору.cy.contains(text) – поиск элемента по тексту.cy.click() – клик по элементу.cy.type(text) – ввод текста в поле.cy.should('have.text', 'value') – проверка текста
элемента.Пример простого теста для формы входа:
describe('Тестирование формы входа', () => {
it('Успешный вход с валидными данными', () => {
cy.visit('/login')
cy.get('input[name=email]').type('user@example.com')
cy.get('input[name=password]').type('password123')
cy.get('button[type=submit]').click()
cy.url().should('include', '/dashboard')
cy.contains('Добро пожаловать').should('be.visible')
})
})
Quasar активно использует динамические и интерактивные компоненты,
такие как q-dialog, q-select,
q-table. Для E2E тестов важно учитывать их особенности:
cy.get('selector').click() перед
проверкой содержимого.cy.get('.q-menu').contains('Option').click()
для выбора.cy.get('.q-table tbody tr').Пример работы с q-select:
cy.get('q-select[label="Статус"]').click()
cy.get('.q-menu').contains('Активный').click()
cy.get('q-select[label="Статус"]').should('contain.text', 'Активный')
Quasar компоненты часто используют асинхронные действия, например загрузку данных через Axios. В таких случаях Cypress автоматически ждёт завершения DOM обновлений, но иногда требуется явное ожидание:
cy.intercept('GET', '/api/users', { fixture: 'users.json' }).as('getUsers')
cy.visit('/users')
cy.wait('@getUsers')
cy.get('table tbody tr').should('have.length', 5)
Использование cy.intercept позволяет подменять
API-ответы и создавать стабильные тесты без зависимости от реального
сервера.
Cypress легко интегрируется в процессы CI/CD, такие как GitHub Actions, GitLab CI или Jenkins. В конфигурации указывают команды для запуска сервера Quasar и выполнения тестов:
jobs:
e2e-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Установка Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- run: npm install
- run: npm run quasar dev -m spa &
- run: npx cypress run
Cypress автоматически создаёт скриншоты при падении теста, а также
может записывать видео. Для их настройки в
cypress.config.js:
video: true,
screenshotOnRunFailure: true
Эти возможности упрощают отладку и позволяют быстро выявлять проблемные места в интерфейсе Quasar-приложения.
cypress/support/commands.js:Cypress.Commands.add('login', (email, password) => {
cy.visit('/login')
cy.get('input[name=email]').type(email)
cy.get('input[name=password]').type(password)
cy.get('button[type=submit]').click()
})
Page Object Pattern – структура тестов с разделением логики страниц и шагов для повышения читаемости и поддержки.
Тестирование реактивных состояний –
использование cy.wrap() и cy.then() для работы
с данными из Vue-компонентов и store Quasar (например, Pinia).
Эти подходы обеспечивают стабильность тестов и позволяют масштабировать E2E покрытие для больших Quasar-проектов.