шпинат против огурца для BDD в rails

#ruby-on-rails #ruby #cucumber #bdd

#ruby-on-rails #ruby #огурец #bdd

Вопрос:

Я начинаю с BDD. Было интересно, что лучше начать с огурца или шпината. У меня сложилось впечатление, что шпинат является новым продуктом. Посмотрите здесь

С чего мне начать. Критериями будут —

  1. Поддержка по всем направлениям.
  2. Гибкость использования
  3. Интеграция сторонних инструментов и API.

Опять же, это может быть невежественный вопрос новичка: где капибара вписывается в картину.

Комментарии:

1. Есть ли что-нибудь, что может сделать огурец, но шпинат не сможет сделать в настоящее время.

Ответ №1:

Для некоторого контекста я долгое время пользовался Cucumber, но всегда хотел, чтобы это был шпинат с первого дня. Я переключаю все свои проекты на Spinach, несмотря на его недостатки, потому что он использует новую, готовую к выпуску технику PORO (простые старые объекты Ruby ;). Теперь я могу расширять свои шаги, как захочу, потому что это просто Ruby.

Чтобы ответить на ваш вопрос, на момент написания этой статьи:

  1. Поддержка по всем направлениям.

Огурец

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

  1. Гибкость использования

Шпинат

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

  1. Интеграция сторонних инструментов и 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