Сегодня я хочу написать небольшой пост о том, как делиться контекстом между тестами с помощью 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 раз, если это вам как-то помогло;) Увидимся и будьте в безопасности! 🤟👩🏻‍💻