Хорошие примеры огурцов в дикой природе?


Я пробовал огурец для нескольких проектов пару лет назад и ищу, чтобы дать ему еще один ход. Мне действительно не нужна еще одна статья "начинающий огурец". Вместо этого я хотел бы увидеть некоторые фактические применения в дикой природе-то, что другие пользователи огурцов считают идиоматическим и антипаттерн-свободным.

Итак, на ваш взгляд, каковы лучшие примеры реальных спецификаций огурцов в крупных проектах?

8 56

8 ответов:

вы можете узнать диаспоры тесты огурца. Это довольно большой проект, поэтому я думаю, что вы можете чему-нибудь научиться.

вы можете прочитать особенности самого огурца, ребята должны знать, что они делают:

https://github.com/cucumber/cucumber-ruby/tree/master/features

Это не прямой ответ, но я не согласен с предпосылкой в вашем вопросе, но есть решение, поэтому я все равно дам свое мнение.

один из них, что другие пользователи огурец будет считать идиоматическим и антипаттерн-бесплатно

Это утверждение, Я думаю, к сожалению, невозможно удовлетворить.

вот Брэндон Хранители CollectiveIdea занимает общепринятую позицию, что вы должны стремиться к общим, шаги многоразовые, что имеет смысл с общей точки зрения" не повторяйся".

однако, вот Аслак Хеллесей, автор огурца, принимая также общепринятое (но взаимоисключающее) мнение, что вы должны стремиться к сценарию конкретных шагов, что имеет смысл с точки зрения "почему огурец вообще?"

из" учебные колеса оторвались", связанные выше, Аслак делает два примера сценариев, чтобы резко контрастировать два стиля: шаги многоразовые vs сценарий-специфический.

после многих лет использования огурца в обоих стилях, и учитывая выше дилемму, это мои выводы:

  1. многоразовые шаги становятся кошмаром обслуживания, поскольку вам нужно поддерживать более сложные определения шагов, а также избегать конфликтов именования.
  2. конкретные шаги сценария предпочтительны для удобочитаемости и простоты, но также становятся кошмаром обслуживания только из-за к конфликтам именования.

Итак, я решил, что огурец в настоящее время сломан, и обычная капибара поверх вашей любимой платформы модульного тестирования является наиболее гибкой.

Cucumber мог бы, если бы они выбрали, добавить контексты сценариев, сценарии для конкретных функций, пространства имен сценариев и т. д., Чтобы вы могли каким-то образом охватить свои сценарии - по функции, роли пользователя, что имеет смысл - и значительно уменьшить конфликты именования, чтобы сделать шаги для конкретных сценариев действительно жизнеспособными. При этом пойнт, я думаю, был бы явный стилистический победитель. До тех пор всегда будет это напряжение необходимости абстрагироваться от ваших шагов, чтобы избежать конфликтов имен, а не желать, чтобы они были специфичными для сценария для простоты и удобочитаемости.

альтернативный проект, который пытается устранить эти недостатки шпинат, но проект не так уж активен. смотрите мои комментарии здесь об оценке шпината против огурца.

Я тоже искал огуречные проекты. А на самом деле в репозитории Cucumber есть вики-страница со списком таких проектов (не все из них все еще используют огурец, хотя):

проекты с использованием огурца:

источник:https://github.com/cucumber/cucumber/wiki/Projects-Using-Cucumber

рекомендую:

https://github.com/teambox/teambox/tree/dev/features

Update: как упоминал Ивайло Бардаров, они используют websteps, что в настоящее время является плохой практикой. Просто посмотрите на это как на ссылку, чтобы увидеть хорошие функции, а не шаги!

обновление 2: я думаю, что поздно, я многому научился из следующих функций огурца, предоставляемых платной версией Object on Rails book. Исходный код не является открытым исходным кодом, поэтому я не могу разместить его здесь или не могу найти ссылку на него.

мой предпочтительный способ-сохранить язык функций близко к языку домена / бизнеса, а не конкретные шаги или заполнение формы. Так что вместо того, чтобы иметь что-то вроде этого в моих особенностях:

When I fill in "Name" with "XYZ

Я буду иметь мои говорят:

When I create a project:
| name |
| xyz  |

и тогда мой шаг будет, кода нажмите на ссылку, анализировать таблицу и заполнить соответствующие поля формы и т. д.

мы используем Cucumber в моем текущем проекте для редизайна веб-приложения, но это не открытый исходный код, поэтому я не могу предложить реальный набор функций и шагов.

Я скажу, что мы были сильно вдохновлены шаблоном объектов страницы в этих дваобразцы. Мы находимся в середине тяжелого рефакторинга пользовательского интерфейса с командой UX. Использование объектов страницы сделало адаптацию тестов к этим изменениям достаточно простой.

Я хотел бы разместить те из нашего корпоративного РЕПО (массивное внутреннее веб-приложение для Fortune 500).

лучший в дикой природе, вероятно, тесты Википедии:

https://github.com/wikimedia/qa-browsertests

вам действительно нужно абстрагироваться от объектов страницы. Даже тогда, когда ваше приложение проходит через 30 экранов ввода, ваши тесты трудно абстрагироваться.

У меня есть экспериментальный способ быстрого абстрагирования общих путей без циклы; вероятно, следует очистить его и отправить его в качестве запроса на вытягивание Cheezy:https://github.com/cheezy/page-object

общая проблема с большими проектами заключается в том, что функции огурца занимают много времени для написания.

таким образом, существует ряд стратегий, участвующих: Если вы используете Cucumber для описания устаревшей системы, вы получаете достойное покрытие приемочных испытаний через cucumber и capybara, а затем рефакторинг определений шагов cucumber.

Если вы не модульное тестирование должным образом, используйте огурец, чтобы описать счастливого пути в вашем приложении, или только основных, не счастливые пути. Получить покрытие с RSpec (или Xunit выбора).

ключевые проблемы с огурцом заключается в том, что функции должны описывать функциональность на очень высоком уровне. Вам нужно сделать ваши определения шагов сухими и многоразовыми, и я поклонник перенаправления определений шагов, чтобы сохранить интересные функции заинтересованных сторон краткими и точными. Хотя я думаю, что этот момент может быть немного спорным.