Rails 4.1 MiniTest 導入

 今までRailsのテストには Rspec を使っていたのですが、今回はMiniTestを使うことになりました。
 上司の鶴の一声的なものだったので、頑張ればひっくり返せたかもしれませんが、せっかくの機会だったのでMiniTestの使い方を習得してみようと実装を始めました。

 が……

 日本語の資料がとにかく少ない……。
 びっくりするぐらい少ないので、基本的なところをさら~~っとまとめておこうと思います。

前提

 プロジェクトの途中でMiniTestを導入した体で進めていきます。
 アプリケーションを作る時からMiniTestの導入が決まっている場合は下記ページのほうが役に立つと思います。
 Railsテスティングガイド

インストール

 Gem (minitest と minitest-rails)をインストールしたら、まずは rails generate minitest:install コマンドを実行します。
 するとアプリケーションルートに test ディレクトリが生成され、その中に test_helper.rb ファイルが作られます。

テストファイルの作成

 すでにプロジェクトの製作が進んでおり、ひと通りモデルなどが設計されている状態からモデルのテストファイルを作るには、rails generate minitest コマンドを使います。

rails generate minitest:model Sample

 上記具体例であれば /test/models/sample_test.rb ファイルと /test/fixtures/samples.yml ファイルが作成されます。
 作成されたファイルの内容は以下のとおりです。

require "test_helper"

class SampleTest < ActiveSupport::TestCase

  def sample
    @sample ||= Sample.new
  end

  def test_valid
    assert sample.valid?
  end

end
# Read about fixtures at
# http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html

# This model initially had no columns defined.  If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
one: {}
# column: value
#
two: {}
#  column: value

fixture を編集

 次に fixture を編集します。これはテスト時に使用するDBの値になります。
 sample テーブルに int 型の test があるなら、下のように書きます。

sample_1:
  test: 1
  created_at: <%= Time.now %>
  updated_at: <%= Time.now %>

 created_at と updated_at はある前提で書きました。
 view と同じように ruby のコードを埋め込むことも可能です。

テスト作成

 /test/models 配下のファイルを編集して、テストを書いていきます。
 記述方法は非常にシンプルで、中でクラスを初期化して該当メソッドを実行するだけ。命名規約も、メソッド名に test_ を接頭語としてつけるだけ。前準備は setup メソッドに、後処理は teardown メソッドに記述します。
 具体例を書きます。

require "test_helper"

class SampleTest < ActiveSupport::TestCase

  def setup
    # 前処理
    @sample = samples(:sample_1)
  end

  def teardown
    # 後処理
  end

  def test_sample
    assert_equal @sample.test, 1
  end

end

 4行目の samples に渡しているシンボル「:sample_1」は samples.yml の1行目に書いたやつです。
 内容は単純に前処理で生成した @sample の test を 1 と比較し、assert_equal メソッドを使って同じ値かを確認しています。
 MiniTest では assert メソッドでテスト結果を評価します。

assert BOOLEAN                # 実行結果が真なのかチェック
assert_equal VALUE_a, VALUE_b # 2つの値が同じかチェック
assert_empty ARRAY            # 中身が空かチェック
refute BOOLEAN                # 実行結果が偽なのかチェック
refute_equal VALUE_a, VALUE_b # 2つの値が異なっているかチェック

テスト実行

 rake test コマンドを実行してあげればOKです。
 テスト結果を見ながらテストを追加したり、直してあげたりしましょう。
 

備考

 テストファイルを作る際、名前空間がある場合はモデル作る時と同じで :: を使えば指定できる。

rails generate minitest:model NameSpace::Sample

 これで /test/models/name_space/sample_test.rb と /test/fixtures/name_space/samples.yml が生成されます。

 ……色々書いてみましたが、だいたいのことは GitHub に書いてあったりするんですよね。

RSS / feedly
  • follow us in feedly
  • follow us in feedly
ソーシャル
広告