0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails Minitest こんな時どうする?テストクラス毎にfixureを分けたい

Posted at

概要

テストクラス毎にfixureを分けたい。

詳細

Minitestではテストデータをfixtureフォルダにyaml形式のファイルで配置しておかなければならない。yamlファイル名はモデル名であり、アプリケーション全体で1モデル=1fixutureファイルが基本である。

しかし、アプリケーションが複雑になってくると1モデル=1ファイルですべてのテストケースを網羅するようなテストデータを用意するのが難しくなることがある。そこでテストクラス毎にfixureファイルを分けることでテストケースを網羅するテストデータを用意し易くする。

対応

アプリケーション全体で1モデル=1ファイルを一度に読み込むようになっているのを止める。
それぞれのテストクラスで任意のfixtureを読み込むようにする。

サンプルコード

サンプルでは2つのテストクラス book_test.rb と user_test.rb があり、それぞれのテストクラスでBookモデルのテストデータを別々のfixtureから読み込む。

アプリケーション全体で1モデル=1ファイルを一度に読み込むようになっているのを止める。
通常はtest/fixuresフォルダ以下のfixureファイルを読み込む。

test/test_helper.r
ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment'
require 'rails/test_help'

class ActiveSupport::TestCase
  # ここでfixtureを一度に読み込むようになっているのでコメントアウトする
  # fixtures :all
end

このテストクラスでは test/fixtures/book_test フォルダにある books.yaml をBookモデルに読み込むようにする。

test/book_test.rb
require 'test_helper'

class BookTest < ActiveSupport::TestCase

  fixture_directory = Rails.root.join("test", "fixtures", "book_test")
  fixture_files = [:books]
  fixture_models = {:book => Book}
  ActiveRecord::FixtureSet.create_fixtures(fixture_directory, fixture_files, fixture_models, ActiveRecord::Base)

  test "テスト" do
    # テストコード
  end

end

こちらのテストクラスでは test/fixtures/user_test フォルダにある books.yaml をBookモデルに読み込むようにする。このサンプルでは別のモデルであるUserのfixureも読み込んでいる。

test/user_test.rb
require 'test_helper'

class UserTest < ActiveSupport::TestCase

  fixture_directory = Rails.root.join("test", "fixtures", "user_test")
  fixture_files = [:books, :users]
  fixture_models = {:book => Book, :user => User}
  ActiveRecord::FixtureSet.create_fixtures(fixture_directory, fixture_files, fixture_models, ActiveRecord::Base)

  test "テスト" do
    # テストコード
  end

end
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?