LoginSignup
2
0

More than 5 years have passed since last update.

Rails チュートリアル 初心者のためのテスト 作成のこつ ①

Posted at

こんにちは。
今日もRailチュートリアルを勉強している皆さんへ。 
テストで悩んでませんか? 
 
よろしければ、こちらの記事でテストの概略を復習してください。
  

さて、Userモデルを新たに追加する時に
nameや、mail、password が、正しく設定できているかを
validate で検証しますよね。(Rails チュートリアル第6章) 

Rails チュートリアルを終えて、いいね機能をつけようと 
Likeモデルを作る時に 

テストをどう書いたらいいんだろ?

と悩みはげそうになったので、まとめまてみました。 

チュートリアルに沿って、Userモデルで考えてみましょう! 

  1. まず、有効なモデルオブジェクトを作る。
  2. そのモデルが有効かどうか、テストを行う。
  3. あえて、モデルオブジェクトの属性を、有効でないものに変える
  4. 失敗するか、テストをする。
  5. validates を設定!テストでGreen になるか確認する。

User モデルを作成した時のテストを、
上の順で書いていきます。

1. set up メソッドでモデルオブジェクトを作成

def setup
 @user = User.new(name: "example", email: "example@example.com")
end

@userはインスタンス変数であり、
setupメソッド内で宣言しておけば、
すべてのテスト内で、このインスタンス変数が使えるようになります。

2. そのモデルが有効かどうか、テストを行う。

 assert @user.valid?

assert メソッドは、第1引数がtrue である場合に、
テストが成功したものとみなすんでしたね。 

忘れてしまった方は、こちらを参照ください。 

その後、rails test を行い、Green を確認します。

3,4. あえて、モデルオブジェクトの属性を有効でないものに変える 

あえて、エラーにしましょう! 
そして、テストしましょう! (有効じゃないよね?と確認)

@user.name = ""
assert_not @user.valid?

これは、Red になるはずです。 
validates 設定前なので、name が空でも登録できちゃうんです。 

5 validates を設定!テストでGreen を確認する。

ラストです。validates を設定しましょう。

validates (:name, {presence: true })

validates メソッドに{presence: true}というハッシュを渡してます。
ちなみにRails では、()は省略できて、メソッドの最後の引数としてハッシュを渡すときは、{} を省略できるんでしたね。 
なので、省略したコードはこうなります。 

validates :name, presence: true

これで、rails test は Green になります。 
email も同様のことを行い、最終的なコードはこうなります。 

test/models/user_test.rb
require 'test_helper'

class UserTest < ActiveSupport::TestCase

  def setup
    @user = User.new(name: "Example User", email: "user@example.com")
  end

  test "should be valid" do
    assert @user.valid?
  end

  test "name should be present" do
    @user.name = ""
    assert_not @user.valid?
  end

  test "email should be present" do
    @user.email = "     "
    assert_not @user.valid?
  end
end
app/models/user.rb
class User < ApplicationRecord
  validates :name,  presence: true
  validates :email, presence: true
end

 

以上となります。
モデルオブジェクトを作って
あえて、属性を変えてエラーにする。
テストでRed を確認して
validatesを設定して、テストをGreenに変える。
痺れるような、流れですね! 

 
email でも、password も 
以上の流れを意識して書いてみましょう。  
それでは、第2回に続きます。(多分)

2
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
2
0