Хорошие примеры огурцов в дикой природе?
Я пробовал огурец для нескольких проектов пару лет назад и ищу, чтобы дать ему еще один ход. Мне действительно не нужна еще одна статья "начинающий огурец". Вместо этого я хотел бы увидеть некоторые фактические применения в дикой природе-то, что другие пользователи огурцов считают идиоматическим и антипаттерн-свободным.
Итак, на ваш взгляд, каковы лучшие примеры реальных спецификаций огурцов в крупных проектах?
8 ответов:
вы можете узнать диаспоры тесты огурца. Это довольно большой проект, поэтому я думаю, что вы можете чему-нибудь научиться.
вы можете прочитать особенности самого огурца, ребята должны знать, что они делают:
https://github.com/cucumber/cucumber-ruby/tree/master/features
Это не прямой ответ, но я не согласен с предпосылкой в вашем вопросе, но есть решение, поэтому я все равно дам свое мнение.
один из них, что другие пользователи огурец будет считать идиоматическим и антипаттерн-бесплатно
Это утверждение, Я думаю, к сожалению, невозможно удовлетворить.
вот Брэндон Хранители CollectiveIdea занимает общепринятую позицию, что вы должны стремиться к общим, шаги многоразовые, что имеет смысл с общей точки зрения" не повторяйся".
однако, вот Аслак Хеллесей, автор огурца, принимая также общепринятое (но взаимоисключающее) мнение, что вы должны стремиться к сценарию конкретных шагов, что имеет смысл с точки зрения "почему огурец вообще?"
из" учебные колеса оторвались", связанные выше, Аслак делает два примера сценариев, чтобы резко контрастировать два стиля: шаги многоразовые vs сценарий-специфический.
после многих лет использования огурца в обоих стилях, и учитывая выше дилемму, это мои выводы:
- многоразовые шаги становятся кошмаром обслуживания, поскольку вам нужно поддерживать более сложные определения шагов, а также избегать конфликтов именования.
- конкретные шаги сценария предпочтительны для удобочитаемости и простоты, но также становятся кошмаром обслуживания только из-за к конфликтам именования.
Итак, я решил, что огурец в настоящее время сломан, и обычная капибара поверх вашей любимой платформы модульного тестирования является наиболее гибкой.
Cucumber мог бы, если бы они выбрали, добавить контексты сценариев, сценарии для конкретных функций, пространства имен сценариев и т. д., Чтобы вы могли каким-то образом охватить свои сценарии - по функции, роли пользователя, что имеет смысл - и значительно уменьшить конфликты именования, чтобы сделать шаги для конкретных сценариев действительно жизнеспособными. При этом пойнт, я думаю, был бы явный стилистический победитель. До тех пор всегда будет это напряжение необходимости абстрагироваться от ваших шагов, чтобы избежать конфликтов имен, а не желать, чтобы они были специфичными для сценария для простоты и удобочитаемости.
альтернативный проект, который пытается устранить эти недостатки шпинат, но проект не так уж активен. смотрите мои комментарии здесь об оценке шпината против огурца.
Я тоже искал огуречные проекты. А на самом деле в репозитории Cucumber есть вики-страница со списком таких проектов (не все из них все еще используют огурец, хотя):
проекты с использованием огурца:
- Gemcutter
- клиренс
/generators/clearance_features/templates/features/
- WebJam
/features/
- Redcar
/plugins/*/features
- ювелир
/features
- Джекил
/features
- CarrierWave
/features/
- RadiantCMS
- OERPScenario (связанный с OpenERP)
- WontoMedia
/features/
- каталог катушек
- отвар
- Heroku Подтяжки
- TimeFliesBy
- диаспора
- шеф-повар
источник: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 выбора).
ключевые проблемы с огурцом заключается в том, что функции должны описывать функциональность на очень высоком уровне. Вам нужно сделать ваши определения шагов сухими и многоразовыми, и я поклонник перенаправления определений шагов, чтобы сохранить интересные функции заинтересованных сторон краткими и точными. Хотя я думаю, что этот момент может быть немного спорным.