Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

Ruby on Rails Guides - A Guide to Testing Rails ApplicationsのFixturesの項の覚書

コード例も基本Rails Guidesのものです

基本

FixtureはYAMLで記述する
DBへのFixturesのデータ投入はテスト実行前に行われる

以下、記述例

users.yml
david:
  name: David Heinemeier Hansson
  birthday: 1979-10-15
  profession: Systems development

steve:
  name: Steve Ross Kellock
  birthday: 1974-09-27
  profession: guy with keyboard

モデルの関連(Model Associations)

例えばhas_many :articles, belongs_to :categoryの場合、
以下のように書くことでモデルの関連を定義することが可能

fixtures/categories.yml
about:
  name: About
fixtures/articles.yml
one:
  category: about # Model名: fixture定義名

ERB

RailsのFixturesではERBを埋め込むことができる。
ERBはRailsにFixtureがloadされた時に実行される。

例として、以下のように書くと1000件のユーザーが作成される。

<% 1000.times do |n| %>
user_<%= n %>:
  username: <%= "user#{n}" %>
  email: <%= "user#{n}@example.com" %>
<% end %>

テスト実行時の挙動

  • Fixtureに関係するDBのtableのデータを取り除く
  • Fixtureを読み込む
  • Fixture定義データを変数に格納する(以下を参照)

Fixture定義データをActiveRecordオブジェクトとして利用

Fixtureは以下のように書くことでテスト中にActiveRecordのオブジェクトとして用いることができる。

# 以下のように記述する
# <fixtureファイル名>(:<定義名>)

# this will return the User object for the fixture named david
users(:david)

# this will return the property for david called id
users(:david).id

# one can also access methods available on the User class
email(david.girlfriend.email, david.location_tonight)

参考

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

repro
世界59か国6,500以上の導入実績を持つCE(カスタマーエンゲージメント)プラットフォーム「Repro(リプロ)」を提供
https://repro.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away