Как избежать жесткого кодирования значений огурцов? - PullRequest
1 голос
/ 01 ноября 2011

При написании моих сценариев, возможно, вам не придется жестко кодировать текст на шагах?

Как, например, я вставляю имя пользователя в текстовое поле и пароль в поле пароля.

Если мне нужно будет сделать это во многих местах, это будет трудно исправить.

Пример:

Given I am the registered member "myusername"
And I am on the login page
When I fill in "email" with "email@example.com"
And I fill in "password" with "123"
And I press "Login"
Then I should see "Account Activity"

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

Ответы [ 3 ]

7 голосов
/ 02 ноября 2011

Хорошо, вы все еще используете старую версию драгоценного камня cucumber-rails, которая поставляется с обучающими колесами, установленными по умолчанию. Прочтите это сообщение Аслака Хеллесёя "Тренировочные колеса оторвались" .

Суть поста в том, что использование web_steps.rb, хотя это было "стандартом" для лет , теперь ужасно неправильно, и что мы должны чувствовать себя плохо из-за этого.

Цель Cucumber - использовать его для создания понятных / понятных функций для всех людей.

Написание такого сценария долго и скучно:

And I am on the login page
When I fill in "email" with "email@example.com"
And I fill in "password" with "123"
And I press "Login"
Then I should see "Account Activity"

Что вы хотите на самом деле тестировать, так это то, что вы должны иметь возможность войти в систему и после этого увидеть, что нужно сделать, чтобы войти в систему. Что бы это ни было, не должно быть записано в сценарии .

Так что в идеале ваша Scenario (более захватывающая мода) будет выглядеть так:

When I login successfully
Then I should see that I am logged in

Тогда задача выполнения работы ног переходит к некоторым новым определениям шагов. Эти два шага не определены автоматически для вас, как web_steps.rb, а скорее должны записать их в файл в feature/step_definitions. То, что вы называете файлом, зависит от вас, но оно будет содержать содержимое, подобное следующему:

When /I login successfully/ do
  visit root_path
  click_link "Login"
  fill_in "Email", :with => "you@example.com"
  fill_in "Password", :with => "password"
end

Then /^I should see I am logged in$/ do
  page.should have_content("Account Activity")
end 

Не более чрезмерных web_steps.rb определений файлов и шагов очистки. Именно таким и должен быть огурец.

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

Пример Райана - переход от императивных шагов к декларативным. Это вообще лучшая идея. Это означает, что реализация была перенесена в определения шагов, что делает функцию более удобочитаемой и фокусируется на поведении, а не на деталях.

Но если вам нужно быть конкретным с вашими шагами (обязательно), вы можете попробовать что-то вроде

Given I am a registered member
And I am on the login page
When I fill in the login form
And I submit the login form
Then I should see I am logged in

Вы также можете объединить эти шаги, чтобы сделать его еще проще. Но все же, идея Райана, вероятно, лучше в большинстве случаев.

Редактировать: Райан написал книгу. Это довольно хорошо. Привет Райан!

0 голосов
/ 02 ноября 2011

Создайте шаг, чтобы инкапсулировать поведение входа в систему, как описано здесь

Если это работает для вас, я бы тогда предложил настроить Given / I вошел в систему / step для вызовов капибарычтобы получить небольшое повышение производительности.Кроме того, в будущем рекомендуется избегать использования web_steps по причинам, описанным здесь .

...