Для интеграции Jasmine с WebdriverIO необходимо корректно настроить окружение проекта. Основными шагами являются установка необходимых пакетов и конфигурация тестового раннера.
npm install @wdio/cli @wdio/local-runner @wdio/jasmine-framework webdriverio --save-dev
После установки пакетов выполняется генерация конфигурационного файла WebdriverIO:
npx wdio config
В процессе генерации конфигурации следует выбрать:
spec)chromedriver или другой
используемый драйверВ результате конфигурационный файл wdio.conf.js содержит
ключевые настройки для работы с Jasmine:
exports.config = {
framework: 'jasmine',
specs: ['./test/specs/**/*.js'],
jasmineNodeOpts: {
defaultTimeoutInterval: 60000
}
};
jasmineNodeOpts позволяет задавать таймауты, прерывания
при ошибках и другие параметры Jasmine.
Jasmine использует ключевые функции describe,
it, beforeEach, afterEach для
организации тестов:
Пример базового теста:
describe('Главная страница', () => {
beforeEach(() => {
browser.url('https://example.com');
});
it('должна отображать заголовок', () => {
const title = $('h1').getText();
expect(title).toBe('Example Domain');
});
afterEach(() => {
browser.reloadSession();
});
});
Важный момент — WebdriverIO использует синхронный
режим при Jasmine, что позволяет писать тесты в привычном стиле
без явного использования async/await.
Jasmine предоставляет мощный набор матчеров для проверки значений:
toBe — строгая проверка равенства.toEqual — глубокое сравнение объектов.toContain — проверка наличия подстроки или элемента в
массиве.toBeDefined, toBeUndefined — проверка
существования значения.toBeTruthy, toBeFalsy — логические
проверки.С WebdriverIO часто комбинируют с ожиданиями элементов:
it('кнопка должна быть видимой', () => {
const button = $('#submit');
expect(button).toBeDisplayed();
expect(button.isEnabled()).toBe(true);
});
Методы WebdriverIO, такие как isDisplayed(),
getText(), getAttribute(), интегрируются с
Jasmine матчерами, что позволяет строить читабельные и мощные
проверки.
Для подготовки состояния перед выполнением всех тестов удобно
использовать beforeAll:
describe('Авторизация', () => {
beforeAll(() => {
browser.url('https://example.com/login');
});
it('должен авторизоваться с корректными данными', () => {
$('#username').setValue('user');
$('#password').setValue('pass');
$('#login').click();
expect($('#welcome').getText()).toContain('Добро пожаловать');
});
});
Хуки beforeAll и afterAll выполняются один
раз для всей группы тестов, что экономит ресурсы при инициализации
состояния.
Jasmine поддерживает динамическое создание тестов с помощью циклов
или forEach:
const users = [
{ username: 'user1', password: 'pass1' },
{ username: 'user2', password: 'pass2' }
];
describe('Проверка авторизации разных пользователей', () => {
users.forEach(({ username, password }) => {
it(`должен войти как ${username}`, () => {
browser.url('/login');
$('#username').setValue(username);
$('#password').setValue(password);
$('#login').click();
expect($('#welcome').getText()).toContain('Добро пожаловать');
});
});
});
Это позволяет минимизировать дублирование кода и поддерживать набор тестовых данных централизованно.
Хотя WebdriverIO в синхронном режиме скрывает промисы, иногда используются ожидания:
it('элемент должен появиться на странице', () => {
const alert = $('#alert');
alert.waitForDisplayed({ timeout: 5000 });
expect(alert.getText()).toBe('Успешно!');
});
Метод waitForDisplayed гарантирует, что тест не
завершится раньше, чем элемент станет видимым. Также доступны
waitForEnabled, waitForExist,
waitUntil для более сложных условий.
Jasmine легко интегрируется с WebdriverIO репортерами, например
spec или allure:
reporters: ['spec', ['allure', { outputDir: 'allure-results' }]],
Это позволяет собирать детальные отчеты о выполнении тестов, включая скриншоты и шаги. В CI/CD пайплайнах достаточно запустить:
npx wdio run wdio.conf.js
для автоматического прогонки тестов и генерации отчетов.
Jasmine позволяет добавлять кастомные теги через фильтры или методы
fdescribe, fit для фокусировки на отдельных
тестах:
fdescribe('Фокус на авторизации', () => {
it('должен войти с корректными данными', () => {
browser.url('/login');
$('#username').setValue('admin');
$('#password').setValue('admin');
$('#login').click();
expect($('#welcome').getText()).toBe('Добро пожаловать, admin');
});
});
fdescribe запускает только эту группу тестов, что удобно
при отладке большого набора проверок.
Jasmine позволяет гибко управлять таймаутами на уровне отдельных тестов:
it('долгий тест', () => {
browser.url('/slow-page');
const element = $('#slow');
element.waitForDisplayed({ timeout: 10000 });
}, 15000);
Параметр после функции задает индивидуальный таймаут. Совмещение с WebdriverIO ожиданиями повышает стабильность тестов на медленных страницах.
Эта интеграция Jasmine с WebdriverIO формирует надежную платформу для написания функциональных UI-тестов в JavaScript с четкой структурой, гибкими хуками и мощными ассерциями.