1

私の意見と私の目的のために、factory_girl完全に最悪です。いくつかの制限は次のとおりです。

デバッグのサポートなし

ステートメントを含めるdebuggerと、それらはモデル属性として扱われます。デバッガーを呼び出す代わりに、奇妙なエラーが発生します。

FactoryGirl.define do 
  factory :admin do
    name do
      debugger # <-- Does not work.
      Forgery(:name).full_name
    end

    email                 { Forgery(:email).address }

    debugger # <-- Does not work either.

    password              "secret"
  end
end

関連付けの制限

私は愚かすぎるのでしょうか、それともユーザーに 2 つの投稿を追加するエレガントな方法はありませんか?

FactoryGirl.define do
  factory :post do
    title "Foobar"
    content "Some content"
  end


  factory :user do
    name { Forgery(:name).full_name }
    email                 { Forgery(:email).address }

    # This does not work, if the Post model requires Post#user to be set.
    posts [FactoryGirl.create(:post), FactoryGirl.create(:post)]
  end
end

Factory Girlも参照してください- レコードが継続的に作成されるのはなぜですか?

レールで奇妙なバグを引き起こす傾向があります

何が起こったのか覚えていませんが、factory_girl で奇妙な問題が発生することがよくあります。

したがって、これらの例を考えてみましょう。これらの問題がない factory_girl の代替手段はありますか?

4

3 に答える 3

5

私は同意し、Factory Girl の機能が非常に複雑であることに気付きました。

少し前に、(少なくとも当時は) ファクトリー ガール ベースのテストに代わる、より単純な gem を書きました。

ファクトリ定義は、はるかに単純な Ruby を使用しているため、期待どおりに動作します。

確認してください: https://github.com/ginty/cranky

于 2013-06-07T21:25:17.703 に答える
2

結果のオブジェクトのコードではなく、ファクトリ定義内でデバッグするのはなぜですか?

そして、何が問題なのですか

user = FactoryGirl.create(:user)
2.times do
  FactoryGirl.create(:post, user: user)
end
于 2012-05-08T22:43:15.950 に答える
-1

DSLのデバッガステートメントは問題になる可能性があります。いつ実行されるかわかりません。

FactoryGirlは、DSLを実行し、ファクトリの表現を保存し、ファクトリが使用されるときにメモリ内の内部表現を使用できます。

また、自分以外に検査する変数はありません。自己は、定義を構築するための生殖オブジェクトになります。

答えがすべてFactoryGirlの防御であるというリスクがありますが、FactoryGirlの代替手段がデータを入力するDSLである場合でも、デバッグサポートの問題が発生します。

別の方法としては、フィクスチャとActiveRecordを呼び出してテストデータを入力するだけです。本当にFactoryGirlはActiveRecordをあまり持っていません、それはただよりシンボル指向の呼び出しなので、人々はFactoryGirlがするはずだったすべての意味のあるシンボル名を作ることができます。

フィクスチャの途中、またはcreateメソッドに送信するハッシュの途中にデバッガステートメントを配置することはできませんが、少なくともそのように誘惑されることはありません。

(「ファクトリーガールも参照-レコードが継続的に作成されるのはなぜですか?」は、ファクトリーガールが完全に機能している例でしたが、ユーザーは4つのレコードを作成するように指示し、4つのレコードを作成すると驚いていました。)

したがって、フィクスチャとActiveRecord呼び出しに固執する場合、混乱しないように物事は十分に唖然とします。

于 2012-05-08T22:59:34.767 に答える