Тестирование компонентов
С помощью Browser Runner от WebdriverIO вы можете запускать тесты в реальном настольном или мобильном браузере, используя WebdriverIO и протокол WebDriver для автоматизации и взаимодействия с тем, что отображается на странице. Этот подход имеет множество преимуществ по сравнению с другими тестовыми фреймворками, которые позволяют тестировать только с использованием JSDOM.
Как это работает?
Browser Runner использует Vite для отображения тестовой страницы и инициализации тестового фреймворка для запуска ваших тестов в браузере. В настоящее время он поддерживает только Mocha, но Jasmine и Cucumber входят в дорожную карту. Это позволяет тестировать любые компоненты даже для проектов, которые не используют Vite.
Сервер Vite запуск ается тестовым раннером WebdriverIO и настраивается так, чтобы вы могли использовать все репортеры и сервисы, как вы привыкли для обычных e2e-тестов. Кроме того, он инициализирует экземпляр browser
, который позволяет вам получить доступ к подмножеству WebdriverIO API для взаимодействия с любыми элементами на странице. Аналогично e2e-тестам, вы можете получить доступ к этому экземпляру через переменную browser
, прикрепленную к глобальной области видимости, или импортируя её из @wdio/globals
, в зависимости от настройки injectGlobals
.
WebdriverIO имеет встроенную поддержку следующих фреймворков:
- Nuxt: тестовый раннер WebdriverIO обнаруживает приложение Nuxt и автоматически настраивает композаблы вашего проекта и помогает имитировать бэкенд Nuxt, подробнее в документации Nuxt
- TailwindCSS: тестовый раннер WebdriverIO обнаруживает, используете ли вы TailwindCSS, и правильно загружает окружение в тестовую страницу
Настройка
Чтобы настроить WebdriverIO для модульного или компонентного тестирования в браузере, инициализируйте новый проект WebdriverIO с помощью:
npm init wdio@latest ./
# или
yarn create wdio ./
Когда запустится мастер конфигурации, выберите browser
для запуска модульного и компонентного тестирования и выберите один из предустановленных вариантов, или выберите "Other", если вы хотите запускать только базовые модульные тесты. Вы также можете настроить пользовательскую конфигурацию Vite, если уже используете Vite в своем проекте. Для получения дополнительной информации ознакомьтесь со всеми опциями раннера.
Примечание: По умолчанию WebdriverIO будет запускать тесты браузера в CI в безголовом режиме, например, если переменная окружения CI
установлена в '1'
или 'true'
. Вы можете вручную настроить это поведение с помощью опции headless
для раннера.
В конце этого процесса вы должны обнаружить wdio.conf.js
, который содержит различные конфигурации WebdriverIO, включая свойство runner
, например:
loading...
Определяя различные capabilities, вы можете запускать свои тесты в разных браузерах, при желании параллельно.
Если вы всё ещё не уверены, как всё работает, посмотрите следующий учебник о том, как начать работу с компонентным тестированием в WebdriverIO:
Тестовая среда
Вы полностью решаете, что вы хотите запускать в своих тестах и как вы хотите отображать компоненты. Однако мы рекомендуем использовать Testing Library в качестве утилитарного фреймворка, так как он предоставляет плагины для различных компонентных фреймворков, таких как React, Preact, Svelte и Vue. Он очень полезен для отображения компонентов на тестовой странице и автоматически очищает эти компоненты после каждого теста.
Вы можете по своему усмотрению комбинировать примитивы Testing Library с командами WebdriverIO, например:
loading...
Примечание: использование методов рендеринга из Testing Library помогает удалять созданные компоненты между тестами. Если вы не используете Testing Library, убедитесь, что вы прикрепляете свои тестовые компоненты к контейнеру, который очищается между тестами.
Скрипты настройки
Вы можете настроить свои тесты, запуская произвольные скрипты в Node.js или в браузере, например, внедряя стили, имитируя API браузера или подключаясь к стороннему сервису. Хуки WebdriverIO можно использовать для запуска кода в Node.js, в то время как mochaOpts.require
позволяет импортировать скрипты в браузер до загрузки тестов, например:
export const config = {
// ...
mochaOpts: {
ui: 'tdd',
// предоставить скрипт настройки для запуска в браузере
require: './__fixtures__/setup.js'
},
before: () => {
// настроить тестовое окружение в Node.js
}
// ...
}
Например, если вы хотите имитировать все вызовы fetch()
в своем тесте со следующим скриптом настройки:
import { fn } from '@wdio/browser-runner'
// запустить код перед загрузкой всех тестов
window.fetch = fn()
export const mochaGlobalSetup = () => {
// запустить код после загрузки тестового файла
}
export const mochaGlobalTeardown = () => {
// запустить код после выполнения файла спецификации
}
Теперь в ваших тестах вы можете предоставить пользовательские значения ответов для всех запросов браузера. Подробнее о глобальных фикстурах в документации Mocha.