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 具有这样的机械师语法?我没有找到一个。帮助表示赞赏。

提前谢谢杰森

4

2 回答 2

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')
于 2010-05-05T21:13:37.770 回答
0

如果您担心测试的干燥性,您可以考虑我创建的active_factory 插件。在其中你可以定义一个这样的工厂:

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 - ... }

它将在两个模型之间创建关联。因此,您可以保持规范 DRY,同时避免创建大量工厂。

抱歉,如果我没有准确回答您的问题

于 2011-04-14T17:59:18.290 回答