テストコードのエラーを解決したいです。
解決したいテスト内容:passwordが存在してもpassword_confirmationがない場合は登録できないこと (FAILED - 1)
ruby on railsで簡単なメモアプリを作成してます。
deviseのテストコードを書いているところ、以下のエラーが発生しました。
RSpecとFactoryBotをつかってエラーコードを書いてます。
発生している問題・エラーメッセージ
User #create email、password、password_confirmationが存在すれば登録できること emailがない場合は登録できないこと passwordがない場合は登録できないこと passwordが存在してもpassword_confirmationがない場合は登録できないこと (FAILED - 1) Failures: 1) User#create passwordが存在してもpassword_confirmationがない場合は登録できないこと Failure/Error: expect(user.errors[:password_confirmation]).to include("とパスワードの入力が一致しません") expected [] to include "とパスワードの入力が一致しません" # ./spec/models/user_spec.rb:26:in `block (3 levels) in <top (required)>' Finished in 0.32876 seconds (files took 3.3 seconds to load) 4 examples, 1 failure Failed examples: rspec ./spec/models/user_spec.rb:22 # User#create passwordが存在してもpassword_confirmationがない場合は登録できないこと
該当のソースコード
user.rspec.rb
ruby
1require 'rails_helper' 2describe User do 3 describe '#create' do 4 5 it "email、password、password_confirmationが存在すれば登録できること" do 6 user = build(:user) 7 expect(user).to be_valid 8 end 9 10 it "emailがない場合は登録できないこと" do 11 user = build(:user, email: nil) 12 user.valid? 13 expect(user.errors[:email]).to include("を入力してください") 14 end 15 16 it "passwordがない場合は登録できないこと" do 17 user = build(:user, password: nil) 18 user.valid? 19 expect(user.errors[:password]).to include("を入力してください") 20 end 21 22 it "passwordが存在してもpassword_confirmationがない場合は登録できないこと" do 23 user = build(:user, password_confirmation: nil) 24 user.valid? 25 binding.pry 26 expect(user.errors[:password_confirmation]).to include("とパスワードの入力が一致しません") 27 end 28 end 29end
users.rb(factorybot)
ruby
1FactoryBot.define do 2 3 factory :user do 4 email {"kkk@gmail.com"} 5 password {"000000"} 6 password_confirmation {"000000"} 7 8 end 9end
model/user.rb
ruby
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 has_many :memos 7end
試したこと
binding.pryを用いたデバッグを行いました。
下記のようなコードになり、[:password_confirmation]
が空欄であることは分かったのですが、何故空欄であるのかの原因を追求することができませんでした。
ターミナル
ruby
1 2 20: end 3 21: 4 22: it "passwordが存在してもpassword_confirmationがない場合は登録できないこと" do 5 23: user = build(:user, password_confirmation: nil) 6 24: user.valid? 7 => 25: binding.pry 8 26: expect(user.errors[:password_confirmation]).to include("とパスワードの入力が一致しません") 9 27: end 10 28: end 11 29: end 12 13[1] pry(#<RSpec::ExampleGroups::User::Create>)> user 14=> #<User id: nil, email: "kkk@gmail.com", created_at: nil, updated_at: nil> 15[2] pry(#<RSpec::ExampleGroups::User::Create>)> user.errors 16=> #<ActiveModel::Errors:0x00007f990140b0e0 @base=#<User id: nil, email: "kkk@gmail.com", created_at: nil, updated_at: nil>, @details={}, @messages={}> 17[3] pry(#<RSpec::ExampleGroups::User::Create>)> user.errors[:password_confirmation] 18=> [] 19[4] pry(#<RSpec::ExampleGroups::User::Create>)>
初歩的なミスかもしれませんが、どなたかご教示いただけますと助かります。
どうぞよろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ruby 2.5.1p57
Rails 5.0.7.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。