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.

モデルの単体テストコードで使われるメソッド・マッチャについて(RSpec)

Posted at

メソッド一覧(一部)

①valid?

 日本語で「正しい」を意味しており、「正しいかどうか」を判断してくれるメソッド。基本は異常系のテストで使用される。
 作成したデータが正しく保存される場合は、trueを返して、保存されない場合はfalseを返す。また保存されない場合は、「なぜ保存されないのか」の示すエラーメッセージも生成する。

users.rb
FactoryBot.define do
  factory :user do
    nickname              { Faker::Name.initials(number: 2) }
    email                 { Faker::Internet.free_email }
    password              { Faker::Internet.password(min_length: 6) }
    password_confirmation { password }
  end
end
user_spec.rb
require 'rails_helper'
describe User, type: :model do
  before do
    @user = FactoryBot.build(:user)
  end

  describe 'ユーザー新規登録' do
    context '新規登録がうまくいくとき' do
    # (省略)
    end

    context '新規登録がうまくいかないとき' do
      it "ニックネームが空だと登録できない" do
        @user.nickname = ''
        @user.valid? # <=この部分
        # => false
      end
    end
  end
end

②errorsとhull_messages

 errorsは**valid?**で判定されたデータのエラーを表示させてくれるメソッド。
 hull_messagesはエラーメッセージを出力するためのメソッド。
 基本はこの2つのメソッドを組み合わせて使用する。

users.rb
FactoryBot.define do
  factory :user do
    nickname              { Faker::Name.initials(number: 2) }
    email                 { Faker::Internet.free_email }
    password              { Faker::Internet.password(min_length: 6) }
    password_confirmation { password }
  end
end
user_spec.rb
require 'rails_helper'
describe User, type: :model do
  before do
    @user = FactoryBot.build(:user)
  end

  describe 'ユーザー新規登録' do
    context '新規登録がうまくいくとき' do
    # (省略)
    end

    context '新規登録がうまくいかないとき' do
      it "ニックネームが空だと登録できない" do
        @user.nickname = ''
        @user.valid?
        expect(@user.errors.full_messages).to include("ニックネームを入力してください") # <=この部分
      end
    end
  end
end

この後、改めて紹介しますが、includeとは、日本語で「含む」の意味をもち、「Xの中にYという文字列が含まれているかどうか」を確認できるマッチャのことです。

マッチャとは?

 期待するデータと実際のデータを比較して、一致したまたは一致しなかったという結果を返すメソッドのこと。

マッチャ一覧(一部)

①include

 includeとは、日本語で「含む」の意味をもち、「Xの中にYという文字列が含まれているかどうか」を確認できるマッチャのことです。

users.rb
FactoryBot.define do
  factory :user do
    nickname              { Faker::Name.initials(number: 2) }
    email                 { Faker::Internet.free_email }
    password              { Faker::Internet.password(min_length: 6) }
    password_confirmation { password }
  end
end
user_spec.rb
require 'rails_helper'
describe User, type: :model do
  before do
    @user = FactoryBot.build(:user)
  end

  describe 'ユーザー新規登録' do
    context '新規登録がうまくいくとき' do
    # (省略)
    end

    context '新規登録がうまくいかないとき' do
      it "ニックネームが空だと登録できない" do
        @user.nickname = ''
        @user.valid?
        expect(@user.errors.full_messages).to include("ニックネームを入力してください") # <=この部分
      #        <            X           >           <           Y         > 
    end
  end
end

②be_valid

 be_validとは、expectのインスタンスが正しく保存されていることを判断するメソッド。基本は正常系のテストで使用される。

users.rb
FactoryBot.define do
  factory :user do
    nickname              { Faker::Name.initials(number: 2) }
    email                 { Faker::Internet.free_email }
    password              { Faker::Internet.password(min_length: 6) }
    password_confirmation { password }
  end
end
user_spec.rb
describe 'ユーザー新規登録' do
  context '新規登録がうまくいくとき' do
    it "ニックネーム・メールアドレス・パスワード・パスワード(確認用)が存在すれば登録できる" do
      expect(@user).to be_valid
    end
  end

  context '新規登録がうまくいかないとき' 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?