шпинат против огурца для BDD в рельсах - PullRequest
17 голосов
/ 03 ноября 2011

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

С чего мне начать? Критерии были бы -

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

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

Ответы [ 4 ]

20 голосов
/ 17 ноября 2011

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

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

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

Огурец

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

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

Шпинат

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

  1. Интеграция сторонних инструментов и API

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

Если это действительно «сторонние инструменты и интеграция API», то Spinach поддерживает capybara и rspec, что является большей частью того, что вам нужно.Cucumber имеет сторонние многоразовые библиотеки шагов, но, как я уже отмечал ранее, я думаю, что это плохо.Что касается сторонних разработчиков и интеграций, даже если их еще нет, вы действительно не сможете получить ничего лучше, чем простые старые рубиновые объекты.

Где капибара вписывается в рисунок

Capybara - это ваш тестовый интерфейс для вашего сайта, он же тестовая мышь и клавиатура.Вы можете запустить его в консоли и запустить свое приложение, но это будет повторяться.Огурец / Шпинат (или rspec / test-unit / minitest) могут использовать капибару для автоматизации тестирования вашего приложения.Люди предпочитают Cucumber / Spinach, потому что они помогают вам выйти из кода, чтобы немного подумать как пользователь.


В целом, вам, вероятно, лучше всего получить книгу rspec / cucumber и делать то, что нужно.это говорит.Просто имейте в виду, что тестирование требует времени, поэтому не останавливайтесь на достигнутом.Может быть, проверить шпинат где-то в процессе;если вы любите огурец, вы можете обнаружить, что вам действительно понравится шпинат.

16 голосов
/ 04 ноября 2011

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я - менеджер по шпинату.

Если вы начинаете с BDD, я настоятельно рекомендую две книги:

Я думаю, что важно изучить весь процесс BDD и TDD (снаружи и т. Д.), А затем выбрать инструмент, который вам удобнее.

Сказав это, у Огурца есть огромное сообщество, но многие вещи также применимы к Шпинату, поскольку их объединяет огурец.

Что касается гибкости использования, я бы сказал, что оба они действительно гибкие, но я (очевидно) предпочитаю Spinach, поскольку каждая функция - это просто класс Ruby, в который можно включать модули, наследовать от других классов и т. Д. (Это также относится к Интеграция API).

Если хотите, вы можете взглянуть на spinach-rails-demo и посмотреть, как все работает.

2 голосов
/ 08 августа 2012

Если вы застряли с 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 .

1 голос
/ 03 ноября 2011

Я не могу говорить за Spinach, поскольку я никогда не использовал его, но Cucumber определенно имеет огромную поддержку сообщества с множеством внешних библиотек.

Capybara позволяет вам легко тестировать веб-приложения

When I fill in "username" with "foo"
And I click on "login"
Then I should see "enter your password"
...