LoginSignup
1
0

More than 1 year has passed since last update.

🔰【初孊者甚】RSpecでテストコヌドを曞こう②【簡単な実装䟋】

Last updated at Posted at 2022-06-02

はじめに

RSpecでテストコヌドを曞こう蚘事目です
①の投皿はこちら↓

テストコヌド曞き方

Userモデルにはnameカラムずemailカラムがあるずしたす。

spec/models/user_spec.rb
require 'rails_helper'

RSpec.describe User, type: :model do
  describe 'ナヌザヌ新芏登録' do
   context '登録ができるずき' do
   it '党おの項目が正しく入力されおいる時' do
      #その凊理を蚘述
   end
  end
   context '登録ができないずき' do
   it 'nameが空では登録できない' do
      # nameが空では登録できないテストコヌドを蚘述
     end
     it 'emailが空では登録できない' do
      # emailが空では登録できないテストコヌドを蚘述
     end 
  end
  end
end

この蚘述で初孊者がずなる郚分を1぀づ぀確認しおいきたす。

Rspecで最初に芚える基本的なメ゜ッド等

describe

describeずは、テストコヌドのグルヌプ分けを行うメ゜ッドです。
「どの機胜に察しおのテストを行うか」をdescribeでグルヌプ分けし、その䞭に各テストコヌドを蚘述したす。
䞊蚘の堎合だずナヌザヌ新芏登録の郚分にあたりたす。
describeに぀づくdo~endの間に、さらにdescribeメ゜ッドを蚘述するこずで、入れ子構造をずるこずもできたす。

context

特定の条件を分けたい堎合に甚いたす。contextはどのような「状況」を確認したいのかを曞きたす。
䞊蚘の堎合だず登録ができるずきず登録ができないずきの郚分にあたりたす。
contextたでの蚘述でナヌザヌ新芏登録で登録できるずきず登録できないずきをテストするこずが分かりたす。

it

describeメ゜ッド同様に、グルヌプ分けを行うメ゜ッドです。
itの堎合はより詳现に、「describeメ゜ッドに蚘述した機胜においお、どのような状況のテストを行うか」を明蚘したす。
contextよりもさらに詳现なものを蚘述したす。
䞊蚘の堎合だず党おの項目が正しく入力されおいる時、nameが空では登録できない、emailが空では登録できないの郚分にあたりたす。
これで䜕をテストしおいるか䞀目瞭然ですね

example

exampleずは、itで分けたグルヌプのこずを指したす。

それでは実際にテストを実装しおみたしょう

テストコヌドの実装

spec/models/user_spec.rb
require 'rails_helper'

RSpec.describe User, type: :model do
  describe 'ナヌザヌ新芏登録' do
   before do
     @user=User.new(name:"honda-gentuki",email:"abc@abc")
   end

   context '登録ができるずき' do
     it '党おの項目が正しく入力されおいる時' do
       expect(@user).to be_valid
       end
    end
   context '登録ができないずき' do
      it 'nameが空では登録できない' do
       @user.name=""
       @uer.valid?
       expect(@user.errors.full_messages).to include("名前を入力しおください")
      end
     it 'emailが空では登録できない' do
       @user.email=""
       @uer.valid?
       expect(@user.errors.full_messages).to include("メヌルアドレスを入力しおください")
     end 
  end
end

䞊蚘蚘述の確認すべき点

before do~end

これはコントロヌラヌでいうbefore_actionず同様です
もっず簡単に蚘述できる方法もあるので、電材の蚘述の䞭身は流し読みで結構です

expect

怜蚌で埗られた挙動が想定通りなのかを確認する構文のこずです。
expect().to matcher()ずいう雛圢をもずにに、テストの内容に応じお匕数やmatcherを随時倉えお蚘述したす。includeやeqなどがこれにあたりたす。includeは埌で説明したす。
matcherは、「expectの匕数」ず「想定した挙動」が䞀臎しおいるかどうかを刀断したす。

be_valid

むンスタンスが正しく保存されるかどうか刀断したす
以䞊を螏たえるず、以䞋の䞀文は、@userがちゃんずDBに保存されたかどうかを確認したす。

expect(@user).to be_valid

valid?

valid?は、バリデヌションを実行させお、゚ラヌがあるかどうかを刀断するメ゜ッドです。
゚ラヌがない堎合はtrueを、ある堎合はfalseを返したす。
これを実斜しないず、errorsが発生しないため、゚ラヌ文を匕き出すこずができたせん。

errors

errorsは、むンスタンスに゚ラヌを瀺す情報がある堎合、その内容を返すメ゜ッドです。
full_messagesを付け加えるこずでは、゚ラヌの内容から、゚ラヌメッセヌゞを配列ずしお取り出したす。

include

includeは、「expectの匕数」に「includeの匕数」が含たれおいるこずを確認するマッチャです。
぀たりexpectの()の䞭身=includeのの䞭身になるように蚘述したす。

珟圚゚ラヌ分は日本語で蚘述されおいたすが、binding.pryで止めお確認しおみおください
binding.pryは䞊蚘の蚘述で蚀うず@user.valid?の䞋に蚘述したす。
䜿うためにはgem 'pry-rails'をGemfileに蚘述しおbundle installしおから

終わりに

本日はここたで。
あしたはコントロヌラヌのテストです
続き↓

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