2011-11-01 69 views
1

當寫我scenerios,是有可能不必在步驟硬編碼的文字?如何避免黃瓜功能的硬編碼值?

好比說我在一個文本字段中插入一個用戶名,並在密碼字段中輸入密碼。

如果我需要做這在很多地方,這將是一個痛苦的修正。

例子:

Given I am the registered member "myusername" 
And I am on the login page 
When I fill in "email" with "[email protected]" 
And I fill in "password" with "123" 
And I press "Login" 
Then I should see "Account Activity" 

我不希望我的用戶名,電子郵件和密碼硬編碼。

+0

請給我們展示真實的例子。 –

+0

@RyanBigg更新了一個例子。 – codecompleting

+1

這是不是對黃瓜的目的是寫一個可測試的故事,甚至非技術人員非常可讀的故事。如果我們開始混合變量,則可讀性會略微偏離窗口。當然也可以使用Rspec和水豚和硒。 – Rasmus

回答

7

好了,你還在使用cucumber-rails寶石附帶默認安裝的訓練車輪的舊版本。閱讀這篇文章AslakHellesøy"The training wheels came off"

該帖子的要點是,使用web_steps.rb,雖然它已成爲年「標準」現在是非常錯誤的,我們應該爲此感到難過。

黃瓜的目的是用它做可讀/理解爲特色所有的人。

寫這樣的情況是漫長而無聊:

And I am on the login page 
When I fill in "email" with "[email protected]" 
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 => "[email protected]" 
    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

創建步驟封裝在行爲日誌中描述here

如果這對你的作品,那麼我會建議調整給定的/我/步驟豚我登錄調用獲得輕微提振業績。另外,未來建議您避免使用web_steps,原因如下:here

0

瑞恩的例子是從命令式步驟到聲明式的變化。這通常是一個更好的主意。這意味着該實現已被轉移到步驟定義中,使得該功能更具可讀性,並專注於行爲而不是細節。

但是,如果你需要使用明確的步驟(必要),你可以嘗試像

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 

您還可以結合這些步驟,使其更簡單。但是,Ryan的想法在大多數情況下可能會更好。

編輯:瑞恩寫了一本書。這是相當不錯。嗨,瑞恩!