2012-01-14 26 views
1

定義描述數據庫中更改的步驟的最佳實踐是什麼?黃瓜欄|定義描述數據庫中更改的步驟

例如,我有以下情形:

Scenario: Creating a user 
    Given I am on the users creation page 
    When I fill in "Name" with "Chandler Bing" 
    And I click "Create User" 
    Then the user should be added into the database 

我怎樣才能更好地確定最後一步:

Then /^the user should be added into the database$/ do 
    User.count.should eq 1 
end 

或者有一些其他的,聰明的方法是什麼?

謝謝。

回答

0

我建議使用Pickle gem,它爲您定義了許多數據庫步驟,它們非常好。

0

我會用兩種方法改變它。首先,在較新版本的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 

的幾個注意事項這種方法:

  1. 它允許您的步驟是可重複使用的。如果您想測試否定路徑並嘗試添加無效用戶,則不必編寫新的步驟。
  2. 特徵文件中較少的樣板代碼。如果你有一個利益相關者,他們應該更容易閱讀這些步驟。
  3. 你實際上正在學習水豚,我知道我個人理所當然地以網頁步驟。
  4. 您可以使用更少的代碼添加一堆用戶。
+0

謝謝詳細的答案是,Beerlington。出於某種原因,你的建議似乎對我無法解決。如果我有幾個同名的人呢?在這種情況下,我怎麼能知道用戶是我創建的用戶,而不是同名的用戶?您的解決方案高度依賴於模型屬性的唯一性。 – Shamaoke 2012-01-15 10:53:23

+0

偉大的問題!良好的測試是關於對測試場景有信心。這只是一個例子,顯示了編寫黃瓜場景的另一種方式,可以給你一些額外的靈活性。沒有什麼能夠阻止您向Then步驟添加額外的斷言,該步驟檢查表的大小是否等於數據庫中的記錄數。我會更新我的答案,舉例說明這可能如何工作。 – 2012-01-18 13:53:44

0

如前所述Skydreamer,鹹菜實在是太棒了,你一定要在你的測試工作使用它,你可以較短,Beerlington與我們分享代碼,就像這樣:

Feature: Creating a user 
    Scenario: Successful .... 
    Given a user exists with name: "Said" 
    .............. 
    ..............