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

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

```ruby: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
```

```ruby: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つのメソッドを組み合わせて使用する。

```ruby: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
```

```ruby: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という文字列が含まれているかどうか」を確認できるマッチャのことです。

```ruby: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
```

```ruby: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のインスタンスが正しく保存されていることを判断するメソッド。基本は正常系のテストで使用される。

```ruby: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
```


```ruby:user_spec.rb
describe 'ユーザー新規登録' do
  context '新規登録がうまくいくとき' do
    it "ニックネーム・メールアドレス・パスワード・パスワード（確認用）が存在すれば登録できる" do
      expect(@user).to be_valid
    end
  end

  context '新規登録がうまくいかないとき' do
  # （省略）
  end
end
```