我會用兩種方法改變它。首先,在較新版本的Cucumber中,Web步驟已被棄用。因此,諸如「當我用」blah「填充」blah「時,現在不鼓勵。其次,測試數據庫中用戶的數量並沒有描述完整的情況。您想知道用戶是您創建的用戶,意思是您最終添加的相同名稱和其他任何屬性。爲了處理這些類型的步驟,我發現自己寫場景,如:
Scenario: Creating a user
When I create the following users:
| name |
| Chandler Bing |
| Some Other Guy |
Then I should have the following users:
| name |
| Chandler Bing |
| Some Other Guy |
然後在你的步驟定義,你會做什麼網頁步驟,這樣做的:
Given /^I create the following users:$/ do |table|
table.hashes.each do |row|
visit new_user_path
fill_in 'Name', with: row['name']
click_button 'Create User'
end
end
Then /^I should have the following users:$/ do |table|
# Ensure users with same name are taken into account
table.hashes.size.should == User.count
table.hashes.each do |row|
user = User.find_by_name(row['name'])
user.should_not be_nil
end
end
的幾個注意事項這種方法:
- 它允許您的步驟是可重複使用的。如果您想測試否定路徑並嘗試添加無效用戶,則不必編寫新的步驟。
- 特徵文件中較少的樣板代碼。如果你有一個利益相關者,他們應該更容易閱讀這些步驟。
- 你實際上正在學習水豚,我知道我個人理所當然地以網頁步驟。
- 您可以使用更少的代碼添加一堆用戶。
謝謝詳細的答案是,Beerlington。出於某種原因,你的建議似乎對我無法解決。如果我有幾個同名的人呢?在這種情況下,我怎麼能知道用戶是我創建的用戶,而不是同名的用戶?您的解決方案高度依賴於模型屬性的唯一性。 – Shamaoke 2012-01-15 10:53:23
偉大的問題!良好的測試是關於對測試場景有信心。這只是一個例子,顯示了編寫黃瓜場景的另一種方式,可以給你一些額外的靈活性。沒有什麼能夠阻止您向Then步驟添加額外的斷言,該步驟檢查表的大小是否等於數據庫中的記錄數。我會更新我的答案,舉例說明這可能如何工作。 – 2012-01-18 13:53:44