フィクスチャ

テスト用データを自動的に用意するための仕組み

参考:

フィクスチャのしくみ | Rails ガイド [公式]

使い方

  • フィクスチャは YAML で記述する
  • YAML ファイル内で ERB が使用できる

参考:

Rails のテストで初期データ投入をしてくれる Fixture のつかいかた – Qiita

私が Minitest と Rails の Fixtures にハマった7つの理由 | 有頂天 Ruby

fixtures ファイルの読込に関してのまとめ | odalog

fixtures | Rails ドキュメント (railsdoc.com)

Using Rails Fixtures To Seed a Database | Brandon Hilkert

関連付けを使用する

関連付けするアソシエーションの項目にフィクスチャの定義名を記述する。

参照元での記述

# books.yml
book_one:
  auther: auther_one

参照先での記述

# authers.yml
auther_one:
  name: John

参考:

Rails のテストで初期データ投入をしてくれる Fixture のつかいかた – Qiita

テストからフィクスチャのレコードを参照する

テーブル名のメソッドにフィクスチャファイルにおける定義名をシンボルで渡す。

@user = users(:one)

参考:

Rails のテストで初期データ投入をしてくれる Fixture のつかいかた – Qiita

フィクスチャと seed の使い分け

参考:

テストデータと fixture と seed – Qiita

seed.rb の内容をテストで使う | ひげろぐ

FixtureSet

参考:

ActiveRecord::FixtureSet | Ruby on Rails API [Official]

ロード

参考:

fixtures – ActiveRecord::TestFixtures::ClassMethods | Ruby on Rails API [Official]

rails/minitest don’t load fixtures for select tests – Stack Overflow

fixture_path

参考:

Configuring fixture_path in ActiveRecord test fixtures – Stack Overflow

ERB でアセット URL ヘルパーを使う

test_helper.rbActiveRecord::FixtureSet.context_classActionView::Helpers::AssetUrlHelper をインクルードする。

ActiveRecord::FixtureSet.context_class.include(
  ActionView::Helpers::AssetUrlHelper
)

フィクスチャファイルでアセット URL ヘルパーを使う。

one:
  image_path: <%= asset_path("image_001.png") %>

two:
  image_path: <%= asset_path("image_002.png") %>

参考:

context_class – ActiveRecord::FixtureSet | Ruby on Rails API [Official]

ActionView::Helpers::AssetUrlHelper | Ruby on Rails API [Official]

画像を登録する

参考:

Rails のテストで fixture に画像を登録する方法 | 人と情報

rails でテストや開発用の初期データ (バイナリ) を用意する方法 – スタック・オーバーフロー

画像をアップロードする

参考:

Rails のテストで画像をアップロードする方法 | 人と情報

Rails でファイルアップロードをテストする | tanihiro.log

fixture_file_upload – ActionDispatch::TestProcess::FixtureFile | Ruby on Rails API [Official]

データベースにロードする

開発用データベースにフィクスチャをロードする。

$ RAILS_ENV=development rails db:fixtures:load

参考:

rails db:fixtures:load を使おう | KAYAC engineers’ blog

データベースのクエリ結果を含める

参考:

use rails fixture object in another fixture file – Stack Overflow

ActiveRecord::TestFixtures

参考:

ActiveRecord::TestFixtures | Ruby on Rails API [Official]

ActiveRecord::TestFixtures::ClassMethods | Ruby on Rails API [Official]

rails/test_fixtures.rb at v6.0.0.rc1 · rails/rails – GitHub

CarrierWave

参考:

CarrierWave を使いつつ fixtures + minitest で test を書く – Qiita

比較

参考:

Minitest と RSpec、Fixtures と FactoryGirl の良いところ悪いところをコードを書いて比較してみた | give IT a try

ActiveRecord を使わないモデルでエラー

テスト実行時に存在しないテーブルにアクセスしようとしてエラーが発生する。

対策:

該当するフィクスチャを読み込まないようにする。

参考:

Unit Testing non activerecord models and still load fixtures – Stack Overflow

Tips

参考:

Tricks and Tips for using Fixtures effectively in Rails | BigBinary Blog

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です