ファクトリーボット(Railsテスト)

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 ] end

エイリアス

Factory 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" } end

シーケンス

Factory 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)
ファクトリーがスタブされる前にコードを挿入できる

参照

Ruby用のその他のテストライブラリ

  • NullDB : データベースの使用を回避することでテストを高速化する方法。
  • Fixture Builder : テスト実行前に Ruby ファクトリーをフィクスチャにコンパイルするツール。
  • Shoulda : 追加のヘルパー、マクロ、アサーションを含む test/unit の拡張機能。
  • Rspec :行動駆動開発フレームワーク
  • Capybara : Web アプリケーションの受け入れテスト フレームワーク。

参考文献

  1. ^ 「プロジェクトの命名履歴」 . github.com/thoughtbot/factory_bot .
  2. ^ 「FactoryGirlを待つ」 Thoughtbotブログ
  3. ^ 「Rails テスト。hiringthing.com
  4. ^ a b c d e「はじめに」 . ruby​​doc.info/gems/factory_bot .
  5. ^ 「特性」。Thoughtbotブログ