独自の戦略
独自の構築の戦略を加えてfactory_botの挙動を拡張したいときがあります。
戦略は2つのメソッドassociation
及びresult
を定義します。
association
はFactoryBot::FactoryRunner
インスタンスを受け取ります。
このインスタンスはrun
を呼んでお好みで戦略を上塗りできます。
2つ目のメソッドresult
はFactoryBot::Evaluation
インスタンスを受け取ります。
コールバック、object
、hash
(結果のインスタンスやファクトリで定義された属性に基づくハッシュを得るためのもの)、create
のきっかけとなる手段を(notify
で)を提供します。
create
はファクトリで定義されたto_create
コールバックを実行します。
factory_botで、戦略が内部で使われる仕組みを理解するには、4つの既定の戦略それぞれのソースを眺めるのが、恐らく一番簡単です。
以下はFactoryBot::Strategy::Create
を使ってモデルにJSON表現を構築する戦略を組む例です。
class JsonStrategy
def initialize
@strategy = FactoryBot.strategy_by_name(:create).new
end
delegate :association, to: :@strategy
def result(evaluation)
@strategy.result(evaluation).to_json
end
def to_sym
:json
end
end
factory_botに新しい戦略を認識させるために、その戦略を登録できます。
FactoryBot.register_strategy(:json, JsonStrategy)
こうして呼べるようになります。
FactoryBot.json(:user)
最後に、戦略の代わりに新しいオブジェクトと登録することによってfactory_bot独自の戦略を上塗りできます。