Что такое Cypress: Введение и архитектура
Этой статьей мы начинаем большой цикл по cypress.io.
Тестирование веб-приложений является одной из важнейших составляющих разработки, и в связи с высокими требованиями к качеству выпускаемых продуктов потребность в стабильных инструментах автоматизации тестирования растет с каждым днем. На рынке сегодня большое количество инструментов и фреймворков автоматизации с открытым исходным кодом. Cypress — один из таких инструментов, который быстро завоевал признание и сегодня пользуется огромной популярностью при автоматизации инеграционного и сквозного (End to End) тестирования пользовательского интерфейса.
В нашем цикле статей вы узнаете обо всех тонкостях Cypress и получите пошаговое руководство по его настройке и использованию.
В нашей первой статье мы рассмотрим следующие темы:
- Что такое Cypress?
- Чем он лучше других инструментов?
- Архитектура Cypress
- Основные компоненты архитектуры
- Уникальные возможности Cypress
- Отличия между Selenium и Cypress?
Что такое Cypress?
Это next-gen инструмент для тестирования UI, созданный для современного веба. Он решает критические проблемы, с которыми сталкиваются разработчики и QA-инженеры при тестировании современных приложений, например, проблемы синхронизации, несоответствие тестов из-за того, что элементы не видны или недоступны.
CYPRESS — Aprenda 3 formas de capturar os elementos para testar.
Он построен на Node.js и поставляется в виде npm-модуля. Поскольку в основе cypress лежит Node.js, для написания тестов используется JavaScript. Но 90% кода может быть сгенерировано с помощью встроенных команд Cypress, которые легко освоить.
Cypress поставляется в комплекте с jQuery (библиотека Javascript) и наследует многие методы jQuery для поиска и управления UI-компонентами, обработки событий, CSS-анимации и работы Ajax.
Что делает Cypress уникальным инструментом?
Существует много уникальных особенностей Cypress, которые делают его одним из удобных вариантов для автоматизации тестирования веб-приложений. Вот некоторые из них:
- Архитектура Cypress обеспечивает быстрое, последовательное и надежное выполнение тестов по сравнению с другими инструментами автоматизации.
- Устойчивость к Flaky-тестам. Cypress автоматически ожидает выполнения команд, прежде чем двигаться дальше. Больше никаких проблем с асинхронностью.
- Возможность тестирования граничных кейсов с помощью имитации ответа сервера (создания мок-ответов сервера)
- Удобство отладки тестов. Cypress делает снапшоты во время выполнения тестов. В журнале команд всегда можно увидеть, что произошло на каждом шаге.
- Просмотр видеозаписей выполнения тестов при запуске из Cypress Dashboard.
Помимо всего вышеперечисленного, Cypress изменил представление о том, как происходила разработка системы автоматизации тестирования. На приведенном ниже рисунке это очень хорошо видно:
Cypress (O Teste Front-End Mais Fácil que Você vai Ver) // Dicionário do Programador
При этом, конечно, у Cypress есть и недостатки, и некоторые из них довольно существенны. Было бы упущением не перечислить их здесь.
- Он относительно новый и у него нет такого обширного сообщества, как, например, у Selenium. Но в последние годы Cypress набирает обороты, и сообщество растет большими темпами.
- Как уже говорилось ранее, в Cypress вы можете использовать только JavaScript. Вы не сможете писать тесты на Cypress на статически типизированных языках, таких как C# и Java. Но, поскольку в наши дни JavaScript является одним из самых популярных языков для разработки фронтенда, использование его для автоматизации тестирования устраняет разрыв между разработчиками и тестироващиками.
- Поскольку Cypress работает внутри браузера, в нем нет поддержки работы с внешней функциональностью: например, с всплывающими окнами, вкладками и т.п.
- До версии 4.0.0 он поддерживал только Chrome и Electron. Cypress 4.0.0 включает поддержку браузеров Mozilla Firefox (бета-поддержка) и Microsoft Edge (на базе Chromium), что является большим шагом вперед для кросс-браузерного тестирования.
- Отсутствие поддержки shadow DOM. Shadow DOM в двух словах — это «DOM-дерево поверх DOM-дерева». Это собственное изолированное дерево DOM со своими элементами и стилями, полностью изолированное от исходного DOM.
- Он не поддерживает нативные мобильные приложения, но в будущем планируется поддержка мобильных браузеров.
Архитектура Cypress
Большинство инструментов тестирования (например, Selenium) работают вне браузера. Движок Cypress работает непосредственно в браузере. Другими словами, именно браузер будет исполнять код ваших тестов.
Это позволяет Cypress отслеживать и менять поведение браузера прямо во время выполнения, манипулируя DOM-деревом и изменяя запросы и ответы сети на лету.
Это открывает возможность для нового вида тестирования наряду с абсолютным контролем над вашим приложением (фронт и бэк). Давайте посмотрим на разницу между архитектурой выполнения тестов Selenium и Cypress:
Как мы видим в случае с Selenium, каждый из браузеров предоставил свои драйверы, которые взаимодействуют с экземплярами браузера для выполнения команд. В отличие от этого, в Cypress все команды выполняются внутри браузера, как показано на изображении ниже:
Браузеры, которые поддерживает Cypress: Canary, Chrome, Electron(Default), Chromium, браузеры Mozilla Firefox (бета-поддержка) и браузеры Microsoft Edge (на базе Chromium).
С помощью Cypress можно проводить модульное, функциональное, интеграционное и сквозное (End to End) тестирование. Он подходит для всех уровней пирамиды тестирования.
Из каких компонентов состоит Cypress?
У Cypress есть два основных компонента, которые по умолчанию поставляются при установке — Cypress Test Runner и Cypress Dashboard. Один из них используется в качестве программы для запуска тестов Cypress на локальной машине, а другой нужен для отслежвания выполнения тестов из Automation Suite и их статусы.
Test Runner: запускает тесты в уникальной интерактивной программе, которая позволяет видеть состояние тестов во время их выполнения и одновременно просматривать тестируемое приложение. Ниже перечислены ключевые компоненты Test Runner, на которые мы должны обратить внимание при выполнении тестов.
- Статус теста (Test Status Menu): Меню показывает сводку о количестве выполненных, успешных, проваленных или незавершенных тестов, а также время, затраченное на тест.
- URL Preview: показывает URL теста, помогает отследить URL.
- Размер viewport-а (области видимости): установите размер viewport-а вашего приложения для тестирования responsive (отзывчивых) веб-приложений.
- Журнал команд (Command Log): показывает журналы команд по мере выполнения для всех тестов.
- Экран просмотра приложения (App Preview): вы можете увидеть приложение прямо во время выполнения теста.
Cypress Dashboard: сервис, который предоставляет вам доступ к записанным тестам — обычно при запуске тестов Cypress из CI/CD. Dashboard дает вам представление о том, что происходило во время выполнения ваших тестов.
Примечание: Мы рассмотрим детали работы Test Runner и Dashboard в следующих статьях.
Какие уникальные возможности предоставляет Cypress?
Cypress предоставляет множество функций, которые очень облегчают жизнь тестировщика:
Путешествие во времени: Cypress может делать снимки приложения во время выполнения тестов. После выполнения тестов можно навести курсор на каждую команду в панели Test Runner, чтобы увидеть, что происходило на каждом шаге.
Отладка: Cypress позволяет отлаживать тесты с помощью привычных инструментов, таких как Developer Tools. Читаемые ошибки и трассировка стека делают отладку очень удобной.
Автоматическое ожидание: С Cypress нет необходимости задавать явное ожидание для ваших тестов. Он автоматически ожидает команды и утверждения, прежде чем приступить к их выполнению.
Шпионы, заглушки и часы: Как и в Unit-тестах, вы можете контролировать поведение функций, ответы сервера с помощью spy-методов и функциональности стабов, которые предоставляет Cypress.
Контроль сетевого трафика: Используя Cypress, вы можете управлять сетевым трафиком по своему усмотрению и настраивать ответы на API-коллы в соответствии с вашими потребностями.
Последовательные результаты: Поскольку Cypress не использует Selenium или WebDriver и выполняет тесты непосредственно в браузере, это способствует быстрому, последовательному и надежному тестированию, в котором нет flaky-тестов.
Скриншоты и видео: Автоматически делает скриншоты при падении теста или записывает видео всего тест-сьюта при запуске из CLI.
Отличия между Selenium и Cypress
Приведенный ниже рисунок дает четкое представление о различиях между Selenium и Cypress:
Выводы:
Это next-gen инструмент для тестирования UI, созданный для современного веба. Он выполняет тесты непосредственно в браузере.
Кроме того, Cypress предоставляет встроенный Test Runner, с помощью которой можно запускать тесты непосредственно из Cypress UI.
Он предоставляет доступ к Cypress Dashboard, где показаны результаты всех запусков тестов.
Cypress UI предоставляет различные уникальные возможности, такие как путешествие во времени, автоматическое ожидание, стабы и т.д., что делает его уникальным среди других инструментов автоматизации тестирования.
Источник: testengineer.ru
Чем Cypress прекрасен для новичков автоматизации?
Уверен, что никакой другой framework для тестирования не имеет такой понятной, объёмной и обширной документации. Она написана на простом английском языке, содержит описание API, тонну полезных гайдов от разработчиков проекта, к примеру — настройка конфигурации.
Каждая страница описывающая дефолтные методы содержит подобную таблицу. В ней находиться описание переменных, аргументов, опшинов и их значения по умолчанию. Также приведены примеры и подсказки, как правильно использовать методы и комбинировать их с другими для достижения результатов. Справа находится меню для быстрой навигации по разделам страницы. Очень удобно в работе, когда что-то забыл, сразу прыгнуть в «Examples» для какой-либо функции.
Документация — огромный плюс Cypress, полагаю, что разработчики потратили на ее создание в разы больше времени, чем на саму разработку. Если выделить пару часиков на чтение, вы спокойно сможете писать тесты на Cypress и настраивать их под свои нужды.
P.S Если с английским совсем не дружите, не беда — у сайта есть русская локализация.
Community
Конечно, оно не на столько велико как у Selenium, но мне всегда удавалось найти решение проблем в «гуглах». Более того, разработчики активно читают github issues и прислушиваются к мнению потребителей. Часто выпускают полезные подкасты и ведут блог .
Простота установки и скорость работы
Установить Cypress невероятно просто!
npm install cypress — все что вам нужно.
Cкорость его работы заслуживает отдельной похвалы. К примеру, мой тест кейс на 100+ шагов пробегает менее, чем за 3 минуты. Все благодаря его архитектуре: Cypress написан на JavaScript, а test runner это и есть браузер. Чем выше скорость интернета, тем быстрее Cypress делает свою работу. Framework автоматически ждет завершения команд, запросов и ассёртов, прежде чем продолжить выполнение.
Поэтому вам не приходится ломать голову с async await!
Cypress стимулирует изучать API тестируемого приложения
Рано или поздно вы столкнетесь с тем, что тесты падают из-за фейлов в серверных запросах, и было бы круто их обрабатывать.
В Cypress runner мы можем наблюдать запросы, которые отправляются на сервер.
Так вот, их можно хендлить с помощью cy.route
И в нужный момент проверить ответ сервера:
Таким образом, вы снижаете вероятность фейла, всегда в курсе для чего нужен конкретный endpoint, какие данные принимает и что должен вернуть. Кроме того, определять причину возникновения дефекта в разы проще!
Test runner
Это окно — прекрасный инструмент для debugging процесса, ведь вы в реальном времени видите как выполняется тест. Кроме того, если код изменится, Cypress автоматически перезапустит тест, и вам не нужно делать никаких лишних действий. Даже после выполнения теста вы можете вернуться в любую его часть и посмотреть, что происходило, так как Cypress сохраняет скриншоты и видео.
Отдельного внимание заслуживает помощник для селекторов. Тыкакем на значок «прицела», наводим курсор на нужный элемент и получаем селектор:
Изучение селекторов и assertions
Cypress из-под коробки включает JQuery, Chai и Sinon extensions . Что это дает? Вы получаете мощные инструменты для поиска и проверки DOM элементов, которые давно себя зарекомендовали. Гугл изобилует информацией про каждый из них. Пример моих помощников: Xpath helpers, JQueary cheat sheet, CSS selectors
Итоги
Если вы только пробуете себя в автоматизации, я рекомендую учиться работая в Cypress. Конечно он не идеален, к примеру мне в работе попались: проблема с отправкой form-data и cross origin error. Так же Cypress не позволяет запускать тесты в нескольких табах одновременно и переходить на другие ресурсы.
Но я хотел сделать упор на достоинствах этого инструмента для легкого старта в автоматизированном тестировании! Ведь научится писать тесты с помощью этого framework`а не трудно благодаря шикарной документации и интуитивно понятном синтаксисе. Согласитесь, свичнуться на что-то другое не станет проблемой, если вы получили хорошую базу.
- автоматизация тестирования
- qa automation
- qa
- cypress
- тестирование
- testing framework
- Тестирование IT-систем
- Тестирование веб-сервисов
Источник: habr.com
cypress trackpad что это за программа
Ноутбуки Apple стали примером того, что такая деталь, как трекпад, может быть весьма удобна в использовании. Владельцы MacBook Air и Macbook Pro в один голос говорят, что с такими устройствами ввода они не испытывают в необходимости использовать мышь.
Apple начала продажи клавиатуры, мыши и трекпада в цвете «серый космос»
Apple начала официальные продажи трекпада Magic Trackpad 2, мыши Magic Mouse 2 и клавиатуры Magic Keyboard 2 в эксклюзивном цвете «серый космос». Это следует из материалов российского онлайн-магазина компании, где новинки уже доступны для покупки. Заявленный срок доставки товаров составляет 1-2 недели с момента заказа.
На eBay появились аксессуары для iMac Pro по баснословной цене
На торговой площадке eBay появилось объявление о продаже набора аксессуаров для iMac Pro, состоящего из космическо-серой клавиатуры Magic Keyboard, мыши Magic Mouse и трекпада Magic Trackpad. Выкупная стоимость комплекта составляет ни много ни мало 2500 долларов США.
Apple Pencil и Magic Trackpad: а почему нет?
Все еще используете графический планшет при работе с изображениями на Mac? Вероятно, вскоре про это можно будет забыть. Согласно новому патенту Apple, компания планирует «подружить» два своих крутых аксессуара: Apple Pencil и Magic Trackpad.
Apple патентует клавиатуру-трекпад
В Сети был обнаружен очередной патент Apple. На этот раз компания выдвинула проект новой клавиатуры. Описываемая в патенте как Fusion keyboard, клавиатура будет совмещать себе традиционные клавиши и touch-интерфейс.
Как изменить скорость скроллинга трекпада Mac
Каждый человек по-своему воспринимает текст на экране компьютера. Кому-то достаточно быстро пролистать страницу, чтобы ознакомиться со всем контентом на ней, другим же необходимо долго вчитываться в каждое предложение. Поэтому рано или поздно вам может понадобиться отрегулировать скорость скроллинга трекпада MacBook.
Трекпад новых MacBook просто создан для работы с фотографиями
В новом MacBook и обновленном MacBook Pro Retina Apple представила трекпад, особо чувствительный к нажатиям со стороны пользователя, под названием Force Touch. Но если вы думали, что с данным трекпадом можно взаимодействовать только при помощи пальцев, то это вовсе не так: сторонние разработчики уже выпустили специальное приложение и даже стилус для работы с фотографиями и рисования.
[Патент] Apple наделит клавиатуру функциональностью трекпада
Патент Apple, недавно появившийся в Сети, рассказывает о том, как компания может модернизировать клавиатуру MacBook.
Периферийные устройства Apple: забыты и брошены
У Apple есть великолепные, но забытые и брошенные устройства. Magic Mouse — октябрь 2009 года. Magic Trackpad — июль 2010 года. Оригинальная проводная клавиатура, та что с цифровым блоком — август 2007. А сейчас конец 2013-го — ситуация «ни в какие ворота», правда? Многие, очень многие пользуются этим старьём и, по всей видимости, ситуация всех устраивает.
Или так только кажется со стороны?
Apple запатентовала трекпад MacBook
Одной из самых примечательных особенностей нынешнего поколения MacBook Pro является чрезвычайно привлекательный и приятный в использовании трекпад из стекла и алюминия, поддерживающий использование мультитач-жестов. И вот с сегодняшнего дня эта разработка полностью принадлежит компании Apple, которой удалось запатентовать данную технологию.
Словарь бизнес-терминов. Академик.ру . 2001 .
Смотреть что такое «ТРЕКПАД» в других словарях:
Трекпад — … Википедия
Magic Trackpad — Apple Magic Trackpad Тип: Трекпад Разработчик: Apple Inc. Выпущен: 27 июля, 2010 Magic Trackpad трекпад производства Apple Inc. Трекпад поддерживает технологию Multi Touch. Он был представлен 27 июля 2010 го … Википедия
VoiceOver — Utility Скриншот работы VoiceOver Utility Тип Программа работы с компьютером для слепых Разработчик … Википедия
HTC Desire — Производитель HTC Поддержив … Википедия
Тачпад — ноутбука Тачпад (англ. touchpad сенсорная площадка), сенсорная панель указательное устройство ввода, применяемое чаще всего в ноутбуках. Как и другие указательные устройства, тачпад обычн … Википедия
Boot Camp — Окно управления разделами жёсткого диска Тип Утилита … Википедия
MacBook Pro — Тип Ноутбук Выпущен 14 февраля 2006 перва … Википедия
Apple MacBook — Тип Ноутбук Выпущен 18 мая 2010 Выпускался по 20 Июля, 2011 для потребителей (Остаётся доступным для Образовательных учреждений) … Википедия
Touchpad — Тачпад ноутбука Тачпад (англ. touchpad сенсорная площадка), сенсорная панель указательное устройство ввода, применяемое, чаще всего, в ноутбуках. Как и другие указательные устройства, тачпад обычно используется для управления «указателем»,… … Википедия
Семейство компьютеров MacBook — Apple MacBook Тип Notebook Выпущен 14 октября 2008 Выпускался по >> Процессор 2.0 / 2.4 GHz Intel Core 2 Duo Память … Википедия
Мышка или трекпад? Еще несколько лет назад ответ на этот вопрос был очевиден. Сейчас уже не все так однозначно.
Мышка в качестве манипулятора проделала долгий путь: менялись технологии и качество ввода, но основной принцип оставался неизменным. До сих пор именно мышка является наиболее удобным манипулятором в ряде ситуаций, но она была и остается дополнительным аксессуаром, который не всегда удобно или возможно взять с собой в эпоху портативной техники. С мышкой удобно играть в динамичные шутеры, иногда проще управляться в графическом редакторе и, пожалуй, работать за большим монитором. Хотя последнее можно отнести к банальной привычке.
Трекпад или тачпад — это совсем другая история. Ноутбуки давно оснащаются сенсорной площадкой, призванной заменить мышь в дороге. Однако только Apple все-таки удалось искоренить в пользователях привычку тянутся за мышью, оказываясь за компьютером. Именно трекпады в ноутбуках Apple являются золотым стандартом в индустрии, очень удобны и практически всегда способны заменить манипулятор из прошлого. Другие производители ноутбуков также значительно подтянули средний уровень тачпадов в своих продуктах, поэтому желающих обратиться к мышке за помощью должно стать еще меньше.
Задай мне кто-нибудь такой вопрос несколько лет назад, и ответ был бы однозначен: только мышка. Однако появление увеличенных трекпадов в компьютерах Apple изменило расклад сил и мое мнение. Трекпад моего MacBook безумно удобен и чертовски функционален. Стандартной мышке потребовалась бы куча дополнительных кнопок, чтобы тягаться с сенсорной площадкой в функциональности.
Что уж говорить о технологии Force Touch — это подлинное будущее. Таким образом, лично у меня нет никаких сомнений: в подавляющем большинстве ситуаций трекпад — мой основной и единственный выбор.
Итак, друзья, теперь ваша очередь выбирать: мышь или трекпад. Бородатое прошлое или технологичное и миниатюрное будущее. Аргументированные точки зрения, подкрепленные собственным опытом, приветствуются. Поехали.
(4.50 из 5, оценили: 2)
Источник: computermaker.info
Cypress для начинающих: начало работы со сквозным тестированием
Чтобы продолжить, вам понадобится рабочая установка Node.js в вашей системе. Кроме того, полезно иметь базовое понимание нового синтаксиса JavaScript.
Что такое Cypress? Что такое сквозное тестирование?
Сквозное тестирование (End to End Testing), или тестирование пользовательского интерфейса, — это один из многих подходов к тестированию веб-приложений.
Сквозной тест проверяет, работает ли веб-приложение должным образом, путем тестирования так называемого пользовательского потока — user flow.
Важно ли сквозное тестирование? Да, это так. Но никто не любит тесты E2E. Они могут быть медленными, громоздкими и дорогими в написании.
С другой стороны, тестирование вселяет уверенность в то что ваше приложение работает должным образом. Вы бы специально отправили своим пользователям неисправный продукт?
Настройка проекта
Создадим новую папку cypress-tutorial, зайдем в нее и инициализируем новый проект JavaScript:
mkdir cypress-tutorial cd $_ npm init -y
Внутри этой папки создадим два новых файла.
HTML-документ index.html:
Cypress tutorial for beginners Name Email Your message SEND
Это HTML-форма с набором входных данных и текстовым полем textarea.
Затем создайте файл JavaScript form.js с минимальной логикой для обработки отправки формы:
const form = document.forms[0]; form.addEventListener(«submit», event => < event.preventDefault(); >);
Обратите внимание, что я не добавил стили для простоты примера. Теперь, мы готовы установить Cypress.
Установка Cypress
Чтобы установить Cypress, все еще находясь в папке проекта, запустите:
npm i cypress —save-dev
Дайте ему минуту (ему нужно скачать двоичный файл), а затем запустите:
node_modules/.bin/cypress open
Cypress запустится в первый раз, и в вашем проекте появится куча новых папок. Вы можете безопасно удалить папку с примерами (examples).
Закроем окно и перейдем к следующему разделу.
Запуск проекта
Для запуска проекта на локальном компьютере убедитесь, что у вас установлена новая версия Node.js, а затем запустите команду:
npx serve
Она запустит сервер разработки по адресу http://localhost:5000/. Перейдя по ссылке вы увидите нашу форму:
Теперь пора написать наш первый тест!
Написание первого теста
Создайте новый файл в cypress/integration/form.spec.js и напишите свой первый блок:
describe(«Form test», () => < // >);
describe — это метод Cypress (заимствованный из Mocha) для хранения одного или нескольких связанных тестов. Каждый раз, когда вы начинаете писать новый набор функциональных тестов, оборачивайте его в блок describe.
Как видите, он принимает два аргумента: строку для описания набора тестов и функцию обратного вызова для обертывания фактического теста.
Далее мы встретимся с другой функцией, называемой it, которая является фактическим тестовым блоком:
describe(«Form test», () => < it(«Can fill the form», () =>< // >); >);
Если вы знаете Jest, вы можете вспомнить, что он использует it или test взаимозаменяемо. В случае с Cypress дело обстоит иначе. it единственный возможный блок.
А теперь время для дымового теста (smoke test)! В блоке it напишите:
describe(«Form test», () => < it(«Can fill the form», () =>< cy.visit(«/»); cy.get(«form»); >); >);
Здесь cy — сам Cypress. visit — это метод Cypress для перехода по заданному пути.
get — это метод выбора элементов на странице. С помощью этого кода мы говорим Cypress «иди, и возьми форму на странице».
Через минуту мы увидим Cypress в действии, но сначала немного настроек!
Настройка Cypress
Чтобы немного упростить работу, мы собираемся настроить Cypress. Для начала откройте package.json и создайте скрипт с именем e2e, указывающий на двоичный файл Cypress:
«scripts»: < «e2e»: «cypress open» >,
Команда open запускает визуальное отображение прохождения тестов (в браузере видимое для программиста). Есть еще команда run которая запускает прохождение тестов в консоле.
Затем откройте cypress.json и настройте базовый URL:
С помощью этой опции мы говорим Cypress посещать только наш URL-адрес разработки. (5000 — порт по умолчанию для пакета serve
Теперь мы готовы запустить ваш первый тест!
Запускаем тест
Готовы? Когда сервер разработки все еще работает в терминале:
npx serve
откройте другой терминал и запустите:
npm run e2e
Вы должны увидеть, как Cypress откроет браузер и отобразить страницу. После запуска теста на странице будет что то типа такого:
Это был ваш первый запуск теста! И visit, и get — это команды Cypress, которые также действуют как неявные утверждения (implicit assertions), то есть, если элемент находится на странице, Cypress будет считать, что тест пройден.
Теперь давайте продолжим расширять наш тест, чтобы увидеть, может ли пользователь заполнить форму:
describe(«Form test», () => < it(«Can fill the form», () =>< cy.visit(«/»); cy.get(«form»); cy.get(‘input[name=»name»]’).type(«Molly»); >); >);
Вот еще одна команда Cypress: type, которая, что неудивительно, вводит в наш input элемент указанный текст. Также обратите внимание на селектор CSS для получения элемента ввода.
А пока давайте добавим еще одну команду: should. Эта команда создает утверждение и используется, например, для проверки того, обновляет ли input элемент свое состояние должным образом:
describe(«Form test», () => < it(«Can fill the form», () =>< cy.visit(«/»); cy.get(«form»); cy.get(‘input[name=»name»]’) .type(«Molly») .should(«have.value», «Molly»); >); >);
Обратите внимание на have.value. Если вы новичок в этой концепции, вы можете узнать больше об утверждениях здесь.
Проведя минимальный тест, продолжим в следующем разделе.
Больше тестов и Submit
Чтобы продолжить наш тест, мы можем проверить ввод электронной почты:
Также мы можем проверить текстовую область textarea:
Если вы оставили Cypress открытым, тест должен отслеживать ваши изменения и запускаться автоматически:
Как мило! В качестве вишенки на торте давайте протестируем отправку формы с помощью submit:
Тест должен пройти без проблем. Вы можете заметить одну вещь: все используемые команды с самоописанием: type, submit. Это простой английский.
Теперь давайте немного пофантазируем в следующем разделе с тестированием запросов XHR.
Заглушка запросов XHR с помощью Cypress
Помимо всего прочего, Cypress также может перехватывать запросы AJAX и имитировать ответы. Этот подход известен как stubbing (заглушка).
Чтобы понять разницу между mocking и stubbing, прочтите этот пост.
Stubbing удобен при разработке, когда вам нужен возврат фальшивого ответа на ваши запросы AJAX.
Чтобы продемонстрировать эту возможность, давайте добавим в наш тест следующий фрагмент кода:
describe(«Form test», () => < it(«Can fill the form», () => < cy.visit(«/»); cy.get(«form»); // . // опущено для краткости // . cy.server(); cy.route(< url: «/users/**», method: «POST», response: < status: «Saved», code: 201 >>); cy.get(«form»).submit(); >); >);
Здесь cy.server запускает «виртуальный» сервер, в то время как cy.route настраивает поддельную конечную точку API.
Теперь давайте добавим еще один тест для проверки: после того, как пользователь отправит форму, мы хотим проверить, отвечает ли поддельное API.
Использование stubbing полезно, потому что мы можем полностью обойти настоящее API в процессе разработки. Давайте расширим тест с помощью cy.contains:
describe(«Form test», () => < it(«Can fill the form», () => < cy.visit(«/»); cy.get(«form»); // . cy.server(); cy.route(< url: «/users/**», method: «POST», response: < status: «Form saved!», code: 201 >>); cy.get(«form»).submit(); cy.contains(«Form saved!»); >); >);
Ожидается, что тест завершится неудачно, потому что нет логики для отправки формы в API. В следующем разделе мы поправим тест.
Отправка данных формы в API
На момент написания Cypress не мог перехватывать запросы Fetch. Начиная с версии 4.9.0 Cypress имеет экспериментальную поддержку Fetch stubbing. Чтобы включить его, настройте experimentalFetchPolyfill в cypress.json:
В этом примере, написанном до 4.9.0, мы будем использовать XMLHttpRequest. Откройте form.js и реализуйте следующую логику:
const form = document.forms[0]; form.addEventListener(«submit», event => < event.preventDefault(); new FormData(form); >); document.addEventListener(«formdata», event => < const body = Object.fromEntries(event.formData.entries()); const jsonBody = JSON.stringify(body); const request = new XMLHttpRequest(); request.open(«POST», «https://jsonplaceholder.typicode.com/users/»); request.send(jsonBody); >);
В этом фрагменте я использую событие formdata, вызываемое, когда мы вызываем new FormData.
В прослушивателе событий мы создаем объект с fromEntries (ECMAScript 2019). Далее мы отправляем данные в API.
Чтобы пройти тест, нам также необходимо получить ответ от API и сохранить его в документе. Для этого мы можем прослушивать событие onload XMLHttpRequest:
// omit document.addEventListener(«formdata», event => < const body = Object.fromEntries(event.formData.entries()); const jsonBody = JSON.stringify(body); const request = new XMLHttpRequest(); request.open(«POST», «https://jsonplaceholder.typicode.com/users/»); request.send(jsonBody); // получение ответа request.onload = function() < const jsonResponse = JSON.parse(this.response); >; >);
Наконец, мы можем что опасно (но мы это сделаем просто для простоты) сохранить ответ на странице (пожалуйста, не делайте этого в вашей кодовой базе):
// . request.onload = function() < const jsonResponse = JSON.parse(this.response); document.body.innerHTML += `Response from the server: $`; >;
Пришло время посмотреть на прохождение теста!
Заглушка запросов XHR с помощью Cypress: успешный тест
Подведем итоги полного теста в cypress/integration/form.spec.js:
Вот полный код для form.js:
const form = document.forms[0]; form.addEventListener(«submit», event => < event.preventDefault(); new FormData(form); >); document.addEventListener(«formdata», event => < const body = Object.fromEntries(event.formData.entries()); const jsonBody = JSON.stringify(body); const request = new XMLHttpRequest(); request.open(«POST», «https://jsonplaceholder.typicode.com/users/»); request.send(jsonBody); // получение ответа request.onload = function() < const jsonResponse = JSON.parse(this.response); document.body.innerHTML += `Response from the server: $`; >; >);
Следует иметь в виду, что настоящее API вряд ли вернет ту же форму, что и наша фальшивая заглушка. При разработке реального приложения вам действительно необходимо адаптировать свои тесты к реальной системе.
На данный момент у нас все в порядке, и если вы оставили Cypress открытым, вы уже должны увидеть успешное прохождение теста:
Вы можете увидеть раздел маршрутов вверху слева и заглушку XHR в тестовых выходных данных, это означает, что Cypress перехватил запрос POST.
Это одна из лучших особенностей Cypress, не считая десятков готовых к использованию команд и утверждений.
Данной заглушкой можно закончить урок. Прекрасная работа!
Выводы
Я надеюсь, что вы узнали что-то новое из этого урока, и вы примените эти концепции в своем следующем проекте! Тестирование важно!
Сквозное тестирование не должно быть трудным: Cypress делает его приятным и приятным. Команда Cypress действительно справилась с этим.
Кроме того, есть очень подробная документация: Cypress Docs наполненная передовыми практиками и примерами.
Источник: webdevblog.ru