4

Rails アプリでは、FactoryGirl を使用して、一般的なファクトリといくつかのより具体的なトレイトを定義しています。一般的なケースと、1 つを除くすべての特性には特定の関連がありますが、その関連が作成/構築されていない特性を定義したいと思います。afterコールバックを使用してアソシエーションをidtoに設定できますnilが、最初からアソシエーション レコードの作成が停止されるわけではありません。

特性が属するファクトリに対して定義された関連付けの作成/構築を完全に無効にする方法は特性定義にありますか?

例えば:

FactoryGirl.define do
  factory :foo do
    attribute "value"
    association :bar

    trait :one do
      # This has the bar association
    end

    trait :two do
      association :bar, turn_off_somehow: true
      # foos created with trait :two will have bar_id = nil
      # and an associated bar will never be created
    end
  end
end
4

2 に答える 2

2

@Joe Ferris の回答を試しましたが、factory_bot 5.0.0 では機能しなくなったようです。次のような関連付けに渡すことができるフラグを参照するこの関連する質問を見つけまし た。strategy: :null

FactoryGirl.define do
  factory :foo do
    attribute "value"
    association :bar

    trait :one do
      # This has the bar association
    end

    trait :two do
      association :bar, strategy: :null
    end
  end
end

それは今トリックを行うようです。

ソースコードは、作成やビルドなどのコールバックを停止するだけのように見えるため、関連付けを何もレンダリングしません。

module FactoryBot
  module Strategy
    class Null
      def association(runner); end

      def result(evaluation); end
    end
  end
end
于 2019-02-13T22:44:49.177 に答える