質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1100閲覧

テストでのエラーについて

tamtamtime

総合スコア8

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2023/01/22 01:51

前提

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/ツールのバージョンなど)

初歩的な質問で恐縮ですが、ご教示のほど宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2023/01/22 02:37

まずは、以下のいずれなのか状況を確認してください。 ・テストコードで検証しようとしていたものと、本来意図していた動作が異なる ・本体コードは正しいけれど、それをテストで検証しきれていない ・テストコードが正しく、本体のコードが実際に適切でない
tamtamtime

2023/01/22 02:42

失礼いたしました、 テストコードで検証しようとしていたものと、本来意図していた動作が異なる です。
maisumakun

2023/01/22 05:10

「本来意図していた動作」はどのようなものですか?
tamtamtime

2023/01/22 05:20

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) 上記★のエラーは出ないと思っておりました。
maisumakun

2023/01/22 05:34

テストを基準に書いているということは、テストの題名は意図どおりなのですか?
tamtamtime

2023/01/22 05:38

題名とは「passwordが数字だけだと登録できない」等でしょうか? こちらは意図通りです。
guest

回答1

0

自己解決

大半は、エラー文が想定されているものと違ったことによるエラーでした。
14個あったエラーの内、10個はこれでした。
残りはバリデーションが上手く設定されていないことによるものでした。

ruby

1require 'rails_helper' 2 3RSpec.describe User, type: :model do 4 before do 5 @user = FactoryBot.build(:user) 6 end 7 8 describe 'ユーザー新規登録' do 9 context '新規登録できるとき' do 10 before do 11 @user.first_name = 'あああ' 12 @user.last_name = 'あああ' 13 @user.password = 'test1234' 14 @user.password_confirmation = 'test1234' 15 @user.first_name_yomi = 'アアア' 16 @user.last_name_yomi = 'アアア' 17 end 18 it '正常に登録できる' do 19 expect(@user).to be_valid 20 end 21 it 'passwordとpassword_confirmationが6文字以上であれば登録できる' do 22 expect(@user).to be_valid 23 end 24 it 'first_nameとlast_nameが全角であれば登録できる' do 25 expect(@user).to be_valid 26 end 27 it 'first_name_yomiとlast_name_yomiが全角であれば登録できる' do 28 expect(@user).to be_valid 29 end 30 end 31 32 context '新規登録出来ない時' do 33 it "nicknameが空では登録できない" do 34 @user.nickname = '' 35 @user.valid? 36 expect(@user.errors.full_messages).to include("Nickname can't be blank") 37 end 38 it 'emailが空では登録できない' do 39 @user.email = '' 40 @user.valid? 41 expect(@user.errors.full_messages).to include("Email can't be blank") 42 end 43 it 'passwordが空では登録できない' do 44 @user.password = '' 45 @user.valid? 46 expect(@user.errors.full_messages).to include("Password can't be blank") 47 end 48 it 'passwordが存在してもpassword_confirmationが空では登録できない' do 49 @user.password_confirmation = '' 50 @user.valid? 51 expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password") 52 end 53 it 'passwordが数字だけだと登録できない' do 54 @user.password = '123456' 55 @user.password_confirmation = '123456' 56 @user.valid? 57 expect(@user.errors.full_messages).to include("Password confirmation is invalid") 58 end 59 it 'passwordが英字だけだと登録できない' do 60 @user.password = 'aaaaaaa' 61 @user.password_confirmation = 'aaaaaaa' 62 @user.valid? 63 expect(@user.errors.full_messages).to include("Password confirmation is invalid") 64 end 65 it 'passwordが全角だと登録できない' do 66 @user.password = 'ああああああ' 67 @user.valid? 68 expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password") 69 end 70 it 'passwordとconfirmが一致していないと登録できない' do 71 @user.password = 'test12' 72 @user.password_confirmation ='test123' 73 @user.valid? 74 expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password") 75 end 76 it 'passwordが英数字混合でも6文字未満なら登録できない' do 77 @user.password ='test1' 78 @user.valid? 79 expect(@user.errors.full_messages).to include("Password is too short (minimum is 6 characters)") 80 end 81 it '重複したemailが存在する場合登録できない' do 82 @user.save 83 another_user = FactoryBot.build(:user) 84 another_user.email = @user.email 85 another_user.valid? 86 expect(another_user.errors.full_messages).to include('Email has already been taken') 87 end 88 it 'emailには@が含まれていないと登録できない' do 89 @user.email = 'aaaaaaa' 90 @user.valid? 91 expect(@user.errors.full_messages).to include('Email is invalid') 92 end 93 it 'first_nameが空では登録できない' do 94 @user.first_name = '' 95 @user.valid? 96 expect(@user.errors.full_messages).to include("First name can't be blank") 97 end 98 it 'first_nameが半角では登録できない' do 99 @user.first_name = 'aaaa' 100 @user.valid? 101 expect(@user.errors.full_messages).to include("First name is invalid") 102 end 103 it 'last_nameが空では登録できない' do 104 @user.last_name = '' 105 @user.valid? 106 expect(@user.errors.full_messages).to include("Last name can't be blank") 107 end 108 it 'last_nameが半角では登録できない' do 109 @user.last_name = 'aaaa' 110 @user.valid? 111 expect(@user.errors.full_messages).to include("Last name is invalid") 112 end 113 it 'first_name_yomiが空では登録できない' do 114 @user.first_name_yomi = '' 115 @user.valid? 116 expect(@user.errors.full_messages).to include("First name yomi can't be blank") 117 end 118 it 'first_name_yomiが半角では登録できない' do 119 @user.first_name_yomi = 'aaaa' 120 @user.valid? 121 expect(@user.errors.full_messages).to include("First name yomi is invalid") 122 end 123 it 'first_name_yomiがカタカナ以外の文字(平仮名・漢字・英数字・記号)が含まれていると登録できない' do 124 @user.first_name_yomi = 'a1/あ亜' 125 @user.valid? 126 expect(@user.errors.full_messages).to include("First name yomi is invalid") 127 end 128 it 'last_name_yomiが空では登録できない' do 129 @user.first_name_yomi = '' 130 @user.valid? 131 expect(@user.errors.full_messages).to include("First name yomi can't be blank") 132 end 133 it 'last_name_yomiが半角では登録できない' do 134 @user.first_name_yomi = 'aaaaa' 135 @user.valid? 136 expect(@user.errors.full_messages).to include("First name yomi is invalid") 137 end 138 it 'last_name_yomiがカタカナ以外の文字(平仮名・漢字・英数字・記号)が含まれていると登録できない' do 139 @user.first_name_yomi = 'a1/あ亜' 140 @user.valid? 141 expect(@user.errors.full_messages).to include("First name yomi is invalid") 142 end 143 it 'birthdayが空では登録できない' do 144 @user.birthday = '' 145 @user.valid? 146 expect(@user.errors.full_messages).to include("Birthday can't be blank") 147 end 148 end 149 end 150end

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 7 # has_many :items 8 # has_many :historys 9 10 validates :nickname, presence: true 11 validates :email, presence: true 12 validates :first_name, presence: true 13 validates :last_name, presence: true 14 validates :first_name_yomi, presence: true 15 validates :last_name_yomi, presence: true 16 validates :birthday, presence: true 17 18 VALID_PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i.freeze 19 validates :password, format: { with: VALID_PASSWORD_REGEX} 20 validates :password_confirmation, format: { with: VALID_PASSWORD_REGEX} 21 22 23 with_options allow_blank: true do 24 25 with_options presence: true, format: { with: /\A[ぁ-んァ-ヶ一-龥々ー]/ } do 26 validates :first_name 27 validates :last_name 28 end 29 30 with_options presence: true, format: { with: /\A[ァ-ヶー-]+\z/ } do 31 validates :first_name_yomi 32 validates :last_name_yomi 33 end 34 end 35 36end

投稿2023/01/22 06:56

tamtamtime

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問