2011-01-24 55 views
1

我們有一些配置問題,我們想通過在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__"與當前日期的實例等)?

回答

0

我通常使用黃瓜通過視圖登錄用戶,然後從那裏運行測試。

喜歡的東西:

Given a user exists with email: "[email protected]", account_type: "customer" 
When I go to the homepage 
And I follow "Sign in" 
And I fill in "email" with "[email protected]" 
And I fill in "password" with "password" 
And I press "Sign in" 
0

我認爲這是對寫作更聲明步驟,如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__的實例,但是我不會自己選擇這個選項 - 感覺它會影響該場景的可讀性太大。儘管你的選擇!