Обычно критерии приемлемости наших историй расходятся следующим образом:

As a user, I want to ...

Этого достаточно, чтобы донести намерение разрабатываемой функции до читателей-людей, которые понимают последствия и делают выводы о том, как может выглядеть правильное действие, но во многих случаях существующий продукт уже имеет какой-то образец взаимодействия, который можно воссоздать для новых случаев. Однако проблема заключается в том, какой пользователь участвует в игре: человек или машина, читающая интерфейс приложения? И, кроме того, можем ли мы каким-то образом автоматизировать взаимодействие с пользователем, чтобы понять, что мы испортили существующий пользовательский интерфейс. Традиционно, конечно, эта задача возложена на команду контроля качества, которая работает с различными замечательными инструментами для выполнения таких требований. Но на самом деле это требование опыта разработчика. Зачем разработчику внешнего интерфейса нужны сложные и неудобные сценарии тестирования, такие как Protractor? И, очевидно, юнит-тесты не подойдут. Если разработчик хочет написать тест, ему было бы удобнее иметь тесты, которые легко пишутся в синтаксисе в стиле корнишонов, где базовая структура обрабатывает простые файлы и отображает ГЛАГОЛЫ и СУЩЕСТВИТЕЛЬНЫЕ на простом, распространенном, вездесущем языке. к общему поведению, реализуемому в JavaScript. Я продемонстрирую, как это сделать с помощью Cypress.

Для начала нам нужно разобраться где лежат все наши файлы, в папке cypress находим:

Важные файлы, над которыми я здесь работал, находятся в integration и videos (результат выполненной интеграции). Приступим (простите за корявый код):

огурец_спецификация:

has.js

Это общая утилита, от которой зависят как Cypress, так и Protractor:

home-unit_spec.js:

Как читатель может заметить, я уже кое-что напутал. Относитесь к схемам именования с недоверием. В моей папке tests/bdd находим:

Папка utils должна говорить сама за себя, как и игрушки внутри:

пример функции 1

пример функции 2

пример функции 3

сочинять

getAngular

получитьЭлемент

getScope

нагрузка

Демонстрация

В любом случае home-unit_spec.js немного растрепан, но на самом деле это всего лишь «стандартный» подход Cypress (хотя и отфильтрованный моими плохими привычками кодирования). Итак, мы просто покажем, что выполняет метаспецификация обобщения корнишона (я называю ее «метаспецификацией» из-за введения формата в стиле корнишона и презумпции мышления в терминах вездесущего языка, или «язык домена»).