Я думаю, что это случай для написания более декларативных шагов, таких как 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__
, но я бы сам не выбрал этот вариант - такое чувство, что оно слишком сильно влияет на читаемость сценария. Хотя ваш выбор!