我正在使用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用机械师语法表现得那样?我找不到一个。帮助赞赏。
提前谢谢 杰森答案 0 :(得分:0)
是的,你可以。需要蓝图语法
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')
答案 1 :(得分: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 - ... }
它会在两个模型之间建立关联。因此,您可以保持您的规格干,同时避免创建大量工厂。
对不起,如果我没有回答你的问题