Сегодня я хочу написать небольшой пост о том, как делиться контекстом между тестами с помощью Cypress - всего за 3 шага 🤩. Если вы никогда не слышали об этом инструменте, согласно официальному сайту: Cypress - это инструмент тестирования интерфейса нового поколения, созданный для современного Интернета. Он активно использовался во внешнем интерфейсе, потому что это довольно простой и понятный инструмент. Он использует библиотеку утверждений Chai, а также расширения Sinon и jQuery, но глазурью на торте является то, что Cypress позволяет нам писать сквозные (E2E), интеграционные и модульные тесты. 🤯
Может быть, вам интересно: «Привет, Дженни, мы не должны обмениваться данными между тестами, они должны быть независимыми… 🤭». Да, это правда, но иногда у нас есть некоторые статические данные, которые мы будем использовать несколько раз в одном файле (. spec). В этого сообщения, мы будем работать со следующим сценарием: обмен информацией о некоторых личных веб-сайтах (имя и ссылка) и возможность использовать их, когда захотим.
Шаг 1 - Перед крючком ☝️
Прежде всего, все группы тестов заключены в describe
блок, и внутри него мы объявляем каждый тест с помощью it
блока. Также есть хуки, которые мы можем использовать в тестах: before()
, beforeEach()
, after()
и afterEach()
. В нашем случае мы должны использовать ловушку before
, потому что она позволяет нам запускать блок кода перед всеми тестами и гарантирует, что данные доступны в глобальном контексте.
Шаг 2 - Наложение
Теперь у нас есть объект pesonalWebsites
, который содержит название веб-сайта в качестве ключа и ссылку сайта в качестве значения. Чтобы сделать данные доступными в Cypress, нам нужно назначить его псевдониму с помощью cy.as()
.
Под капотом для создания псевдонимов базовых объектов и примитивов используется объект общего контекста Mocha: то есть псевдонимы доступны как
this
.
Кроме того, эти псевдонимы и свойства автоматически очищаются после каждого теста.
В приведенном выше коде в строке cy.wap(websiteLink).as(websiteName)
мы создаем псевдоним с именем веб-сайта в качестве ключа и ссылкой на веб-сайт в качестве значения. Команда cy.wrap()
просто дает что-то ... 'cy.as ()' не работает без цепочки.
Поэтому, когда мы запустим тесты, псевдоним будет доступен, как на картинке ниже:
Шаг 3 - Традиционное выражение функции 🌝
Псевдонимы доступны с помощью @aliasName
, но в сценарии общего контекста у нас есть доступ к нему только с помощью ключевого слова this
. Вы должны знать, что функции стрелок не работают связывают свои собственные this
, поэтому нам нужно использовать традиционное выражение функции внутри наших тестовых блоков.
Вот и все! Короче говоря: нам нужно создать псевдоним данных, которыми мы хотим поделиться в хуке before, заменить стрелочные функции на традиционное выражение функции и получить доступ к глобальному контексту с помощью
this
сладкой мелочи!
Надеюсь, вам понравился этот пост! Так что, пожалуйста, похлопайте примерно 50 раз, если это вам как-то помогло;) Увидимся и будьте в безопасности! 🤟👩🏻💻