Изменить текст шага в огурце перед соответствием - PullRequest
1 голос
/ 24 января 2011

У нас есть некоторые проблемы с конфигурацией, которые мы хотели бы решить, добавив «специальные константы» в Cucumber. Например, мы хотели бы, чтобы в любом месте текст "__USER__" использовался на шаге, который должен быть заменен текущим пользователем, запускающим приложение (чтобы мы могли проверять такие вещи, как права пользователя).

Стратегия, которую я пытался применить к этому, заключалась в следующем:

BeforeStep do |step|
    domain = get_domain()
    username = get_username()
    step.text.gsub("__USER__", "#{domain}/#{username}")
end

Однако, нет BeforeStep. Я пытался использовать Before do |scenario| ... end, но в сценарии не было ничего, что я мог бы использовать. Как мы можем заменить экземпляры "__USER__" в нашем коде на пользователя (а экземпляры "__CURRENT_DATE__" на текущую дату и т. Д.)?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2011

Я думаю, что это случай для написания более декларативных шагов, таких как When the user logs in, в отличие от таких вещей, как When I fill in "txt_user_name" with "fred". Было бы легко написать определение шага в этом случае:

When /^the user logs in$/ do
    domain = get_domain()
    username = get_username()
    fill_in "txt_user_name", :with => "#{domain}/#{username}"
end

Вы можете даже ввести поэтапное преобразование аргумента, чтобы превратить текст «пользователь» в нужное имя пользователя, чтобы вам не приходилось многократно вносить изменения:

CAPTURE_USER = Transform /^(the user)$/ do |this_isnt_used|
    domain = get_domain()
    username = get_username()
    "#{domain}/#{username}"
end

When /^(#{CAPTURE_USER }) logs in$/ do |user_name|
    puts "Logging in as #{user_name}"
end

Это будет соответствовать шагу Given the user logs in и передать правильное имя пользователя в качестве параметра.

Кроме того, оглядываясь на ваш вопрос, вы можете использовать преобразование, чтобы точно выполнить то, что вы пытались сделать, и заставить его заменить экземпляры __USER__, но я бы сам не выбрал этот вариант - такое чувство, что оно слишком сильно влияет на читаемость сценария. Хотя ваш выбор!

0 голосов
/ 26 февраля 2011

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

Что-то вроде:

Given a user exists with email: "user@gmail.com", account_type: "customer" 
When I go to the homepage 
And I follow "Sign in" 
And I fill in "email" with "user@gmail.com" 
And I fill in "password" with "password" 
And I press "Sign in"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...