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

4

2 に答える 2

0

テストのDRYnessに関心がある場合は、私が作成した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 - ... }

これにより、2つのモデル間に関連付けが作成されます。したがって、多くのファクトリを作成することを避けながら、スペックをドライに保つことができます。

申し訳ありませんが、私があなたの質問に正確に答えていない場合

于 2011-04-14T17:59:18.290 に答える
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 に答える