

現在ruby on railsにてテストコードを書いております。  
エラーでは無いのですが、以下の現象が発生しました。  
RSpecwo使ったuserモデルのテストコードです。(devise利用)

以下が問題のテストコードです。  
25行目でnicknameを空にしているので通常であればエラーとなるのですが、テストコードを正常に通過してしまいます。

**期待すること**  
通常であればエラーが発生し、そのエラー分をexpectで記述したいのですが、そもそもエラーが発生せず困っている。

[code]

    require 'rails_helper'
    describe User do
      before do
        @user = FactoryBot.build(:user)
      end
    
      describe 'ユーザー新規登録' do
        context '新規登録がうまくいくとき' do
          it "nicknameとemail、passwordとpassword_confirmationが存在すれば登録できる" do
            expect(@user).to be_valid
          end
          it "nicknameが8文字以下で登録できる" do
            @user.nickname = "aaaaaaaa"
            expect(@user).to be_valid
          end
          it "passwordが6文字以上であれば登録できる" do
            @user.password = "000000"
            @user.password_confirmation = "000000"
            expect(@user).to be_valid
          end
        end
    
        context '新規登録がうまくいかないとき' do
          it "nicknameが空だと登録できない" do
            @user.nickname = ''
            @user.valid?
            binding.pry
          end
          it "nicknameが9文字以上であれば登録できない" do
            @user.nickname = 'aaaaabccccccccccccccccbbb'
            @user.valid?
          end
        end
      end
    end
    
[/code]

以下のように10行目でnicknameカラムにpresence: trueのバリデーションをかけているのですが、テストが正常に通過してしまいます。

[code]

    class User < ApplicationRecord
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :validatable
      has_many :nutritions
      has_many :favorites, dependent: :destroy
      has_many :fav_nutritions, through: :favorites, source: :nutrition
    
      validates :nickname, presence: true, length: { maximum: 8 }
    
      def already_favorited?(nutrition, current_user)
        Favorite.exists?(user_id: current_user.id, nutrition_id: nutrition.id)
      end
    end
    
[/code]

`bundle exec rspec spec/models/user_spec.rb` コマンドでテストしますがなぜか成功してしまいます。

[![画像の説明をここに入力](https://i.stack.imgur.com/rpV0d.png)](https://i.stack.imgur.com/rpV0d.png)

通常であればnicknameが空の時はエラーになると思うのですが何故なのでしょうか？  
ローカル上でのブラウザでは正常にバリデーションがかかっております。（nisknameを空で登録しようとするとエラー文が返る）

ご教示頂けますと幸いです。


CC BY-SA 4.0
2020-10-29T02:30:28.820
71575
2020-10-29T04:38:40.317
2020-10-29T04:38:40.317
3060
42341
question
ruby-on-rails rspec
RSpec でエラーになるはずのテストが通ってしまう