前提
Ruby on Railsのテストのモデル単体テストで
エラーが出ます。
実現したいこと
異常系テストも全てクリアさせたい
発生している問題・エラーメッセージ
Finished in 0.30708 seconds (files took 1.05 seconds to load) 24 examples, 13 failures Failed examples: rspec ./spec/models/user_spec.rb:53 # User ユーザー新規登録 新規登録出来ない時 passwordが数字だけだと登録できない rspec ./spec/models/user_spec.rb:59 # User ユーザー新規登録 新規登録出来ない時 passwordが英字だけだと登録できない rspec ./spec/models/user_spec.rb:65 # User ユーザー新規登録 新規登録出来ない時 passwordが全角だと登録できない rspec ./spec/models/user_spec.rb:81 # User ユーザー新規登録 新規登録出来ない時 重複したemailが存在する場合登録できない rspec ./spec/models/user_spec.rb:93 # User ユーザー新規登録 新規登録出来ない時 first_nameが空では登録できない rspec ./spec/models/user_spec.rb:98 # User ユーザー新規登録 新規登録出来ない時 first_nameが半角では登録できない rspec ./spec/models/user_spec.rb:103 # User ユーザー新規登録 新規登録出来ない時 last_nameが空では登録できない rspec ./spec/models/user_spec.rb:108 # User ユーザー新規登録 新規登録出来ない時 last_nameが半角では登録できない rspec ./spec/models/user_spec.rb:113 # User ユーザー新規登録 新規登録出来ない時 first_name_yomiが空では登録できない rspec ./spec/models/user_spec.rb:118 # User ユーザー新規登録 新規登録出来ない時 first_name_yomiが半角では登録できない rspec ./spec/models/user_spec.rb:123 # User ユーザー新規登録 新規登録出来ない時 last_name_yomiが空では登録できない rspec ./spec/models/user_spec.rb:128 # User ユーザー新規登録 新規登録出来ない時 last_name_yomiが半角では登録できない rspec ./spec/models/user_spec.rb:133 # User ユーザー新規登録 新規登録出来ない時 birth_dateが空では登録できない
該当のソースコード
ruby
1[spec > models > user_spec.rb] 2 3require 'rails_helper' 4 5RSpec.describe User, type: :model do 6 before do 7 @user = FactoryBot.build(:user) 8 end 9 10 describe 'ユーザー新規登録' do 11 context '新規登録できるとき' do 12 before do 13 @user.first_name = 'あああ' 14 @user.last_name = 'あああ' 15 @user.password = 'test1234' 16 @user.password_confirmation = 'test1234' 17 @user.first_name_yomi = 'アアア' 18 @user.last_name_yomi = 'アアア' 19 end 20 it '正常に登録できる' do 21 expect(@user).to be_valid 22 end 23 it 'passwordとpassword_confirmationが6文字以上であれば登録できる' do 24 expect(@user).to be_valid 25 end 26 it 'first_nameとlast_nameが全角であれば登録できる' do 27 expect(@user).to be_valid 28 end 29 it 'first_name_yomiとlast_name_yomiが全角であれば登録できる' do 30 expect(@user).to be_valid 31 end 32 end 33 34 context '新規登録出来ない時' do 35 it "nicknameが空では登録できない" do 36 @user.nickname = '' 37 @user.valid? 38 expect(@user.errors.full_messages).to include("Nickname can't be blank") 39 end 40 it 'emailが空では登録できない' do 41 @user.email = '' 42 @user.valid? 43 expect(@user.errors.full_messages).to include("Email can't be blank") 44 end 45 it 'passwordが空では登録できない' do 46 @user.password = '' 47 @user.valid? 48 expect(@user.errors.full_messages).to include("Password can't be blank") 49 end 50 it 'passwordが存在してもpassword_confirmationが空では登録できない' do 51 @user.password_confirmation = '' 52 @user.valid? 53 expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password") 54 end 55 it 'passwordが数字だけだと登録できない' do 56 @user.password = '123456' 57 @user.password_confirmation = '123456' 58 @user.valid? 59 expect(@user.errors.full_messages).to include("Password is only numbers, it cannot be registered") 60 end 61 it 'passwordが英字だけだと登録できない' do 62 @user.password = 'aaaaaaa' 63 @user.password_confirmation = 'aaaaaaa' 64 @user.valid? 65 expect(@user.errors.full_messages).to include("Password is only alphabetic characters, it cannot be registered.") 66 end 67 it 'passwordが全角だと登録できない' do 68 @user.password = 'ああああああ' 69 @user.valid? 70 expect(@user.errors.full_messages).to include("Password is full-width, it cannot be registered") 71 end 72 it 'passwordとconfirmが一致していないと登録できない' do 73 @user.password = 'test12' 74 @user.password_confirmation ='test123' 75 @user.valid? 76 expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password") 77 end 78 it 'passwordが英数字混合でも6文字未満なら登録できない' do 79 @user.password ='test1' 80 @user.valid? 81 expect(@user.errors.full_messages).to include("Password is too short (minimum is 6 characters)") 82 end 83 it '重複したemailが存在する場合登録できない' do 84 @user.save 85 @another_user = FactoryBot.build(:user) 86 @another_user.email = @user.email 87 @another_user.valid? 88 expect(@another_user.errors.full_messages).to include('Email has already been taken') 89 end 90 it 'emailには@が含まれていないと登録できない' do 91 @user.email = 'aaaaaaa' 92 @user.valid? 93 expect(@user.errors.full_messages).to include('Email is invalid') 94 end 95 it 'first_nameが空では登録できない' do 96 @user.first_name = '' 97 @user.valid? 98 expect(@user.errors.full_messages).to include("First name can't be blank", "First name 全角ひらがな、全角カタカナ、漢字で入力して下さい") 99 end 100 it 'first_nameが半角では登録できない' do 101 @user.first_name = 'aaaa' 102 @user.valid? 103 expect(@user.errors.full_messages).to include("First name 全角ひらがな、全角カタカナ、漢字で入力して下さい") 104 end 105 it 'last_nameが空では登録できない' do 106 @user.last_name = '' 107 @user.valid? 108 expect(@user.errors.full_messages).to include("Last name can't be blank", "Last name 全角ひらがな、全角カタカナ、漢字で入力して下さい") 109 end 110 it 'last_nameが半角では登録できない' do 111 @user.last_name = 'aaaa' 112 @user.valid? 113 expect(@user.errors.full_messages).to include("Last name 全角ひらがな、全角カタカナ、漢字で入力して下さい") 114 end 115 it 'first_name_yomiが空では登録できない' do 116 @user.first_name_yomi = '' 117 @user.valid? 118 expect(@user.errors.full_messages).to include("First name yomi can't be blank", "First name kana 全角カタカナで入力して下さい") 119 end 120 it 'first_name_yomiが半角では登録できない' do 121 @user.first_name_yomi = 'aaaa' 122 @user.valid? 123 expect(@user.errors.full_messages).to include("First name yomi 全角カタカナで入力して下さい") 124 end 125 it 'last_name_yomiが空では登録できない' do 126 @user.first_name_yomi = '' 127 @user.valid? 128 expect(@user.errors.full_messages).to include("First name yomi can't be blank", "First name kana 全角カタカナで入力して下さい") 129 end 130 it 'last_name_yomiが半角では登録できない' do 131 @user.first_name_yomi = 'aaaaa' 132 @user.valid? 133 expect(@user.errors.full_messages).to include("First name yomi 全角カタカナで入力して下さい") 134 end 135 it 'birth_dateが空では登録できない' do 136 @user.birth_date = '' 137 @user.valid? 138 expect(@user.errors.full_messages).to include("Birth date can't be blank") 139 end 140 end 141 end 142end
ruby
1[spec > factories > users.rb] 2 3FactoryBot.define do 4 factory :user do 5 transient do 6 person{ Gimei.name} 7 end 8 nickname {Faker::Name.initials(number: 2)} 9 email {Faker::Internet.free_email} 10 password { '1a' + Faker::Internet.password(min_length: 6) } 11 password_confirmation {password} 12 first_name {person.last.kanji} 13 last_name {person.first.kanji} 14 first_name_yomi {person.last.katakana} 15 last_name_yomi {person.first.katakana} 16 birthday {Faker::Number} 17 end 18end
ruby
1[app > models > user.rb] 2 3class User < ApplicationRecord 4 # Include default devise modules. Others available are: 5 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 6 devise :database_authenticatable, :registerable, 7 :recoverable, :rememberable, :validatable 8 9 has_many :items 10 has_many :historys 11 12 validates :nickname, presence: true 13 validates :email, presence: true 14 validates :password, presence: true 15 validates :password_confirmation, presence: true 16 validates :first_name, presence: true 17 validates :last_name, presence: true 18 validates :first_name_yomi, presence: true 19 validates :last_name_yomi, presence: true 20 validates :birthday, presence: true 21 22 with_options allow_blank: true do 23 with_options presence: true, format: { with: /\A[a-z0-9]+\z/ } do 24 validates :password 25 validates :password_confirmation 26 end 27 28 with_options presence: true, format: { with: /\A[ぁ-んァ-ヶ一-龥々ー]/ } do 29 validates :first_name 30 validates :last_name 31 end 32 33 with_options presence: true, format: { with: /\A[ァ-ヶー-]+\z/ } do 34 validates :first_name_yomi 35 validates :last_name_yomi 36 end 37 end 38 39end 40
試したこと
あちこちのwebサイトを検索しましたが、どうしても
全てクリアになりません。
補足情報(FW/ツールのバージョンなど)
初歩的な質問で恐縮ですが、ご教示のほど宜しくお願いいたします。
まずは、以下のいずれなのか状況を確認してください。
・テストコードで検証しようとしていたものと、本来意図していた動作が異なる
・本体コードは正しいけれど、それをテストで検証しきれていない
・テストコードが正しく、本体のコードが実際に適切でない
失礼いたしました、
テストコードで検証しようとしていたものと、本来意図していた動作が異なる
です。
「本来意図していた動作」はどのようなものですか?
User
ユーザー新規登録
新規登録できるとき
正常に登録できる
passwordとpassword_confirmationが6文字以上であれば登録できる
first_nameとlast_nameが全角であれば登録できる
first_name_yomiとlast_name_yomiが全角であれば登録できる
新規登録出来ない時
nicknameが空では登録できない
emailが空では登録できない
passwordが空では登録できない
passwordが存在してもpassword_confirmationが空では登録できない
★passwordが数字だけだと登録できない (FAILED - 1)
★passwordが英字だけだと登録できない (FAILED - 2)
★passwordが全角だと登録できない (FAILED - 3)
passwordとconfirmが一致していないと登録できない
passwordが英数字混合でも6文字未満なら登録できない
重複したemailが存在する場合登録できない
emailには@が含まれていないと登録できない
★first_nameが空では登録できない (FAILED - 4)
★first_nameが半角では登録できない (FAILED - 5)
★last_nameが空では登録できない (FAILED - 6)
★last_nameが半角では登録できない (FAILED - 7)
★first_name_yomiが空では登録できない (FAILED - 8)
★first_name_yomiが半角では登録できない (FAILED - 9)
★first_name_yomiがカタカナ以外の文字(平仮名・漢字・英数字・記号)が含まれていると登録できない (FAILED - 10)
★last_name_yomiが空では登録できない (FAILED - 11)
★last_name_yomiが半角では登録できない (FAILED - 12)
★last_name_yomiがカタカナ以外の文字(平仮名・漢字・英数字・記号)が含まれていると登録できない (FAILED - 13)
★birthdayが空では登録できない (FAILED - 14)
上記★のエラーは出ないと思っておりました。
テストを基準に書いているということは、テストの題名は意図どおりなのですか?
題名とは「passwordが数字だけだと登録できない」等でしょうか?
こちらは意図通りです。

回答1件
あなたの回答
tips
プレビュー