フィクスチャとは?
Railsでサンプルデータを生成するためのデフォルト機能です。
フィクスチャのメリット
- 比較的早い
- Railsデフォルト機能のため環境をセットアップする必要がない。
フィクスチャのデメリット
- Rspecで使う場合は外部ファイルにデータが記述されるので別ファイルの内容をテスト時に覚えておかないといけない。
- データを取り込む際にActiveRecordを使わないのでモデルのバリデーション等の機能のテストを行えない。
- データが脆いため保守に時間をかけないといけなくなる。
フィクスチャの場所(例)
下記の場所にYAML形式のファイルを用意します。
1 |
test/fixtures/users.yml |
フィクスチャの構文(例)
1 2 3 4 5 6 7 |
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: name: MyText two: name: MyText |
Rspecからの呼び出し
例えば上の例で言えばRspecのスペックファイルからフィクスチャデータを呼び出す際は下記のように記述します。
1 |
users(:one) |
フィクスチャの取り込み
下記コマンドを実行するとテスト環境にフィクスチャで用意したデータが取り込まれます。
1 |
rails db:fixtures:load |
なお、既存データは全て削除されてfixturesで用意したデータに完全に差し変わるので実行には注意が必要です。
seedとの違い
fixtureもseedもどちらもデータを用意する機能になりますが以下のように使い分けます。
fixture
テスト用に登録するデータのために使います。(また、現場によってはfixtureではなくfactoryGirlなどを使っている現場はあります。)
「テストデータ」と「通常利用データ」を混在させているとどちらかのデータを修正した際にテスト実行にも影響する可能性があるのでそれを防止するために別途テスト用のデータとしてfixtureという機能があるイメージになります。
seed
マスタデータを初期登録するために使用します。例えば、部署テーブルなどがあった場合の初期データなど。なので、本番データの投入にも普通に使われます。
また、developmentやproductionなど環境ごとに用意することが普通です。
ただ、開発現場によっては全くseedを使っていない現場もいます。開発担当とDB担当が分かれている現場に多くその場合Rails管理外のDBツールなどを使用してCSVインポートなどをしていたりもします。
この記事へのコメントはありません。