2011-08-28 21 views
4

可能有人請解釋爲什麼工廠比測試過程中一個簡單的實例更加有用嗎?更明確地說,我不明白之間的差別:Rails的3個工廠VS簡單的實例化

before(:each) do 
    @attr = { 
    :name => "Example User", 
    :email => "[email protected]", 
    :password => "foobar", 
    :password_confirmation => "foobar" 
    } 
end 

it "should create a new instance given valid attributes" do 
    User.create!(@attr) 
end 

before(:each) do 
    @user = Factory(:user) 
end 
它具有以下工廠

Factory.define :user do |user| 
    user.name     "Michael Hartl" 
    user.email     "[email protected]" 
    user.password    "foobar" 
    user.password_confirmation "foobar" 
end 

回答

4

因爲它可以讓你在一個地方都您所需的變量和關聯。

此外,你可以輕鬆地創建存根或簡單地提取屬性,無需額外的代碼。

興趣是清晰的,一旦你有幾個測試文件,如你要保持你的代碼幹。

旁註:

你應該用「讓」,而不是每次都創建變量

+0

謝謝apneadiving。它看起來像我一樣,所以我假設方便,但由於我從頭開始學習,我想確保我沒有失去任何東西。感謝名單! –

5

您的應用程序獲取更大的一個實例,你從工廠獲得更多的利益。

你的解決方案是偉大的2-3車型。但讓我們說你有一個文章模型,你需要有效的用戶來測試東西。現在你有2個文件,你爲用戶定義@attr。現在想象有更多需要用戶的模型,比如評論,角色等等。

它是用工廠更方便。好處是你可以定義多個默認原型。像管理員用戶,普通用戶,未註冊用戶等。

此外代碼是乾的,所以如果您添加一個新的必填字段,您可以將其添加到您的工廠一次,你就完成了。

所以答案是:基本上它們是一樣的,但是越大的應用程序越需要一種管理所有原型的方法。

+0

+1瞭解詳情 – apneadiving

+0

謝謝!這很清楚。 –