2011-01-06 65 views
9

工廠女孩有一個簡單的方法來創建一個新的工廠,只有一個不存在?工廠女孩新手:如何創建新的記錄,如果還不存在

如果沒有簡單的方法,最簡潔的方法是確保只爲一組黃瓜特徵(和/或規格)創建一個工廠?

例如,我需要一個'用戶'模型中的單個(通用)管理員記錄來測試多個黃瓜功能。理想情況下,我希望在每個創建管理步驟都沒有包裝條件的情況下執行此操作,但不會觸及「已存在記錄」錯誤。

任何建議表示讚賞。

+1

你的意思是「創建新實例」而不是「創建一個新的工廠」?工廠創建實例。 – 2011-01-06 08:34:19

回答

8

創建一個幫助器方法來創建或返回一個單例實例。

 
def create_or_return_admin_user 
    @user ||= Factory(:user, :admin => true) 
end 

,然後調用

create_or_return_admin_user
在您的測試

2

你不能在Factory_girl中這樣做,你需要創建一個方法來檢查記錄是否存在或者它是否不在你的數據庫中。

如果你在設置(Rspec之前)這樣做,你可以確保只有一個記錄。

1

我們已經實現了它是這樣的:在黃瓜的「背景」場景中的特徵文件中的每個「方案」執行前

。因此,在每個功能文件的頂部(在「後臺」),我們設置一個用戶併爲用戶提供管理員角色。

現在,這給你一個管理員用戶準備好並在每個'場景'中可用。

請注意,由於Cucumber正在處理事務中的記錄,因此此管理員用戶將無法在數據庫中存活。因此,如果您需要在某個功能中爲此管理員用戶添加某些內容,並從另一個功能中使用此功能,則此方法無法使用。但正如我理解你的問題,你只是想確保你不會嘗試創建管理員用戶,如果它已經創建。在「後臺」中創建管理員用戶可確保僅爲每個功能創建一次。

請注意,您可以改爲在每個「場景」中創建管理員用戶。在'場景'末尾,黃瓜會從數據庫中刪除它,所以在任何時候,你也只有一個管理員用戶。然而,這不是乾的,不應該完成(除非你在某些'場景'中只需要管理員用戶,並且特別要求它不能出現在其他'場景'中)。

黃瓜「背景」例如使用FactoryGirl步驟定義:

Background: 
    Given the following user exists: 
    | Name | Role   | 
    | Admin | Administrator | 

廠定義:

factory :user do 
    name 'John Doe' 
    role 'Guest' 
end