#ruby-on-rails #ruby #cucumber #bdd
#ruby-on-rails #ruby #огурец #bdd
Вопрос:
Я начинаю с BDD. Было интересно, что лучше начать с огурца или шпината. У меня сложилось впечатление, что шпинат является новым продуктом. Посмотрите здесь
С чего мне начать. Критериями будут —
- Поддержка по всем направлениям.
- Гибкость использования
- Интеграция сторонних инструментов и API.
Опять же, это может быть невежественный вопрос новичка: где капибара вписывается в картину.
Комментарии:
1. Есть ли что-нибудь, что может сделать огурец, но шпинат не сможет сделать в настоящее время.
Ответ №1:
Для некоторого контекста я долгое время пользовался Cucumber, но всегда хотел, чтобы это был шпинат с первого дня. Я переключаю все свои проекты на Spinach, несмотря на его недостатки, потому что он использует новую, готовую к выпуску технику PORO (простые старые объекты Ruby ;). Теперь я могу расширять свои шаги, как захочу, потому что это просто Ruby.
Чтобы ответить на ваш вопрос, на момент написания этой статьи:
- Поддержка по всем направлениям.
Огурец
Spinach все еще разрабатывает некоторые функции, включая «фоновые» блоки, и в настоящее время я пытаюсь заставить его распознавать таблицы.
- Гибкость использования
Шпинат
Огурец с самого начала поощряет плохой пошаговый дизайн, IMO. Если вы создадите шаги, зависящие от конкретной функции, вы будете спотыкаться о них позже, а если вы создадите повторно используемые глобальные шаги, ваши определения функций будут длинными, общими и скучными для чтения. Я слышал, как люди утверждают, что они могут успешно балансировать и быть достаточно конкретными, но при этом иметь многократно используемые шаги; Я считаю себя достаточно сведущим, чтобы, если я не могу сделать это надежно, это слишком сложно.
- Интеграция сторонних инструментов и API
Cucumber, предполагая, что маркер может быть интерпретирован как сообщество.
Если вам действительно нужны «сторонние инструменты и интеграция с API», Spinach поддерживает capybara и rspec, что является большей частью того, что вам нужно. У Cucumber есть сторонние библиотеки многоразовых шагов, но, как отмечалось в моем предыдущем пункте, я думаю, что это плохо. Что касается сторонних разработчиков и интеграций, даже если их еще нет, вы действительно не можете стать лучше, чем обычные старые объекты ruby.
Где капибара вписывается в картину
Capybara — это ваш тестовый интерфейс для вашего сайта, он же тестовая мышь и клавиатура. Вы можете запустить его в консоли и запустить свое приложение, но это будет повторяться. Cucumber / Spinach (или rspec / test-unit / minitest) все могут использовать capybara для автоматизации тестирования вашего приложения. Люди предпочитают Cucumber / Spinach, потому что они помогают вам немного выйти из кода, чтобы думать как пользователь.
В целом, вам, вероятно, лучше всего получить книгу rspec / cucumber и делать то, что в ней написано. Просто имейте в виду, что для успешного тестирования требуется некоторое время, поэтому не останавливайтесь на достигнутом. Возможно, где-то в процессе проверьте шпинат; если вам нравится огурец, возможно, вам действительно понравится шпинат.
Комментарии:
1. У меня всего несколько функций в новом проекте, и я уже чувствую, что глобальное пространство определения шага вызовет у меня проблемы по точным причинам, упомянутым здесь. Я пробовал spinach, и единственной причиной, по которой мы пока выбрали Cucumber, была интеграция инструментов (Rubymine).
2. FWIW, spinach сделал для меня несколько вариантов решения, поэтому я никогда не склонялся к нему и вместо этого годами использовал обычную capybara rspec с большим успехом
Ответ №2:
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я сторонник шпината.
Если вы начинаете с BDD, я бы настоятельно рекомендовал две книги:
Я думаю, что важно изучить все процессы BDD и TDD (outside-in и т. Д.), А Затем выбрать инструмент, С которым вам удобнее.
Сказав это, Cucumber имеет огромное сообщество, но многие вещи также применимы к Spinach, поскольку у них есть общее — корнишон.
Что касается гибкости использования, я бы сказал, что оба они действительно гибкие, но я (очевидно) предпочитаю Spinach, поскольку каждая функция — это просто класс Ruby, в который вы можете включать модули, наследовать от других классов и так далее (это также относится к интеграции API).
Если хотите, вы можете взглянуть на spinach-rails-demo и посмотреть, как все работает.
Комментарии:
1. Спасибо, что предоставили свою точку зрения. Я взгляну на ресурс, который вы упомянули.
Ответ №3:
Если вы застряли с Cucumber и вам не нужны глобальные шаги, вы можете обойти проблему, пометив шаги каким-либо идентификатором сценария:
# features/1_greetings.feature
Scenario: Formal greeting
Given I have an empty array [#1]
And I append my first name and my last name to it [#1]
When I pass it to my super-duper method [#1]
Then the output should contain a formal greeting [#1]
Идентификатор сценария # 1 может иметь любое значение. Мне нравится использовать номера билетов для дальнейшего использования.
Затем вы можете поместить все шаги в один файл определения шага. Это достаточно близко к виду Spinach ::FeatureSteps . Аргументы регулярных выражений тоже отсутствуют!
# features/step_definitions/1_greetings.rb
Given 'I have an empty array [#1]' do
#...
end
And 'I append my first name and my last name to it [#1]' do
#...
end
When 'I pass it to my super-duper method [#1]' do
#...
end
Then 'the output should contain a formal greeting [#1]' do
#...
end
Я опубликовал больше об обходном пути на github.
Ответ №4:
Я не могу говорить за Spinach, так как я никогда им не пользовался, но Cucumber определенно пользуется огромной поддержкой сообщества с множеством внешних библиотек.
Capybara позволяет легко тестировать веб-приложения
When I fill in "username" with "foo"
And I click on "login"
Then I should see "enter your password"
Комментарии:
1. Глядя на краткую презентацию здесь , вы бы сказали, что она может предложить нечто большее, чем Cucumber.
2. Имо, если вы пишете подобные cukes, вы делаете что-то немного неправильно. Захватывайте домен, а не веб.
3. Если вы тестируете сам экран входа в систему, такие шаги хороши, но так называемые веб-шаги в целом считаются плохой идеей, которая частично ответственна за плохую репутацию Cucumber. Подробнее об этом читайте у Аслака, одного из авторов: aslakhellesoy.com/post/11055981222/the-training-wheels-came-off