«Странный» (может быть, «экстремальный» или «сумасшедший») подход к тестированию с использованием огурца - PullRequest
2 голосов
/ 21 марта 2012

Я использую Ruby on Rails 3.2.2, cucumber-rails-1.3.0, rspec-rails-2.8.1, capybara-1.1.2 и factory_girl-2.6.3.У меня есть сценарий, который проверяет, что пользователь регистрируется следующим образом:

Scenario: I register an user
  When I fill in "Name" with "Foo"
  And I fill in "Email" with "foo_bar@email.com"
  And I fill in "Password" with "test_password"
  And I click button "Register"
  Then I should be redirected to the homepage

, и я пытаюсь указать новую функцию (в отдельном файле), где реализовать сценарий, который, используя токен,должен проверить, правильно ли завершен процесс подтверждения подписанного пользователя ( примечание : на самом деле, этот процесс включает доставку сообщения электронной почты, но я не хочу проверить, было ли отправлено это письмо;просто проигнорируй это за этот вопрос).Поскольку я хотел бы протестировать исключительно процесс подтверждения, я подумал о реализации новой функции / сценария, в которой нужно указать что-то вроде Given I am a registered user, для которого нужно запустить Scenario: I register an user.

Scenario: I confirm an user
  Given I am a registered user # Here I would like to run the 'Scenario: I register an user'
  When I go to the confirmation page
  And I enter the confirmation token
  Then ...

В двух словах: Я подумал вызвать весь сценарий в другом сценарии .

Даже если я могу использовать гем FactoryGirl, чтобы «создать» - «зарегистрировать» пользователя, я предпочитаю перейти к описанному выше подходу.потому что я тестирую («практически» говоря, эти «представляют» «невидимых людей», которые, управляемые самоцветом Selenium, открывают мой браузер и выполняют действия), чтобы вести себя максимально точно так же, как ведут себя «настоящие люди», и поэтомутестовые шаги, чтобы неявно следовать всем «реальным» шагам, которые должны быть сделаны в действительности, чтобы зарегистрировать нового пользователя.Следуя этому подходу, я могу проверить, правильно ли работают "внутренности" приложения.

Это правильный подход?Если нет, как я могу / должен продолжить?

Ответы [ 2 ]

7 голосов
/ 21 марта 2012

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

Фраза "Учитывая, что я зарегистрированный пользователь"это то, что подразумевает, что пользователь уже успешно зарегистрирован.На этом этапе вам не следует проходить тестирование регистрации, поскольку это выходит за рамки теста, который вы пытаетесь выполнить.

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

0 голосов
/ 21 марта 2012

Синтаксис для запуска сценария в шаге:

Given /^I authenticate successfully$/ do
  Given 'I am on the login page'
  And 'I fill in "Email" with "eddie@hotmail.com"'
  And 'I fill in "Password" with "secret"'
  When 'I press "Login"'
  Then 'I should see "Welcome"'
end

Заключительные мысли: В общем, ваш файл Feature не должен иметь никакой «заливки» - просто опишите в нем действия, а ваши шаги сделают грязную работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...