Factory Bot(旧称Factory Girl)[ 1 ]は、 Rubyプログラミング言語用のソフトウェアライブラリであり、自動ソフトウェアテスト用のテストフィクスチャを作成するためのファクトリーメソッドを提供します。フィクスチャオブジェクトはオンザフライで作成でき、定義済みの状態を持つプレーンなRubyオブジェクト、既存のデータベースレコードを持つORMオブジェクト、またはモックオブジェクトのいずれかになります。
Factory BotはRuby on Railsアプリケーションのテストでよく使用され、Railsの組み込みフィクスチャ機構を置き換えます。Railsのデフォルト設定では、事前に入力されたデータベースをテストフィクスチャとして使用し、これはテストスイート全体でグローバルです。一方、Factory Botでは、開発者がテストごとに異なる設定を定義できるため、テストスイート内の依存関係を回避するのに役立ちます。[ 2 ] [ 3 ]
ファクトリーは名前と属性のセットによって定義されます。テストオブジェクトのクラスは、ファクトリーの名前によって決定されるか、明示的に設定されます。[ 4 ]
FactoryBot . define do # クラスを自動的に決定するfactory :user do name { "Captain Minion" } superhero { false } end # クラスを明示的に指定するfactory :superhero , class : User do name { "Tony Stark" } superhero { true } end end特性は、あらゆるファクトリーに適用できる属性のグループ化を可能にします。[ 4 ] [ 5 ]
factory :status do title { "フルタイムの仕事を探しています" } trait :international do international { true } end trait :resident do international { false } end trait :comp_sci do comp_sci { true } end trait :electrical do comp_sci { false } end factory :comp_sci_international_student , traits : [ :international , :comp_sci ] factory :electrical_resident_student , traits : [ :resident , :electrical ] endFactory Botでは既存のファクトリーに別名を作成し、再利用することができます。[ 4 ]
factory :user , aliases : [ :student , :teacher ] do first_name { "John" } end factory :notice do teacher # ''user'' に ''teacher'' というエイリアスを使用title { "Office Hours" } end factory :notification do student # ユーザに ''student'' というエイリアスを使用title { "Lecture timings" } endFactory Botは、指定された形式でテスト属性に一意の値を作成することを可能にします。[ 4 ]
FactoryBot . define do factory :title do sequence ( :name ) { | n | "Title #{ n } " } # Title 1、Title 2、など... end endクラスのファクトリーを作成する際に、ファクトリーを継承することができます。これにより、親ファクトリーの共通属性を再利用でき、重複する属性に対して重複したコードを記述する必要がなくなります。ファクトリーはネスト形式で記述することで、継承を効果的に活用できます。
factory :user do name { "Micheal" }factory :admin do admin_rights true end endadmin_user = create ( :admin ) admin_user . name # Micheal admin_user . admin_rights # true親ファクトリを明示的に指定することもできます。
factory :user do name { "Micheal" } endファクトリー:admin 、親:: user 、admin_user { true }を実行します。Factory Botでは、4つの異なる段階でカスタムコードを挿入することができます。[ 4 ]
after(:build)before(:create)after(:create)after(:stub)