2010-05-05 44 views
0

我使用工廠女孩,但像機械師的語法。所以我想,如果有任何的方式創建類名爲藍圖,讓我能有這樣的事情:與factory_girl命名藍圖

User.blueprint(:no_discount_user) do 
    admin   false 
    hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383" 
    is_trader  false 
    name   "foolish" 
    salt   "21746899800.223524289203464" 
end 

User.blueprint(:discount_user) do 
    admin   false 
    hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383" 
    is_trader  true 
    name   "deadbeef" 
    salt   "21746899800.223524289203464" 
    discount_rate { DiscountRate.make(:rate => 20.00) } 
end 

DiscountRate.blueprint do 
    rate {10} 
    not_before ... 
    not_after ... 
end 

有沒有辦法讓與機械師的語法作用一樣,factory_girl?我沒有找到一個。幫助讚賞。

THX提前 傑森

回答

0

當然可以。需要藍圖syntaxe

require 'factory_girl/syntax/blueprint' 
    Sham.email {|n| "#{n}@example.com" } 

    User.blueprint do 
    name { 'Billy Bob' } 
    email { Sham.email } 
    end 

    User.make(:name => 'Johnny') 
+0

shingara, 我知道,這就是我使用它的方式。但問題IST,如果一個人可以使用一個名爲藍圖,如: User.blueprint(:no_discount_user)做 和 User.blueprint(:discount_user)做 這樣我就可以撥打電話: 用戶(:discount_user)。創建一個折扣率爲 和 的用戶(:no_discount_user).make創建一個沒有的用戶。 這將使黃瓜步驟定義在我的情況下很乾燥。但似乎我需要改用機械師。 – 2010-05-05 22:14:58

+0

是的,我認爲這是不可能的。 factory_girl的擴展不能做到這一點 – shingara 2010-05-06 09:01:31

0

如果你關心你的測試乾澀,你可以考慮active_factory plugin,我已經創建了。在這裏面,你可以定義一個工廠是這樣的:

factory :discount_user, :class => User do 
    admin   false 
    hashed_password "226bc1eca359a09f5f1b96e26efeb4bb1aeae383" 
    is_trader  true 
    name   "deadbeef" 
    salt   "21746899800.223524289203464" 
    discount_rate { DiscountRate.make(:rate => 20.00) } 
end 

另一種選擇是隻是「添加折扣」你的測試裏面:

models { discount_rate - user - ... } 

這將創建兩個模式之間的關聯。因此,您可以保持規格乾燥,同時避免創建大量工廠。

對不起,如果我不回答你究竟問題