前提・実現したいこと
RSpec
でemail
に**「@を含まなければ登録できない」**ことをテストしていたら
以下のようなエラーが出て詰まっています。
発生している問題・エラーメッセージ
ターミナル
Failures: 1) User ユーザー新規登録 新規登録できないとき emailに@が含まれていない場合登録できない Failure/Error: @user.email = hogehuga.com NameError: undefined local variable or method `hogehuga' for #<RSpec::ExampleGroups::User::Nested::Nested_2:0x00007fb41aa63b48> # ./spec/models/user_spec.rb:99:in `block (4 levels) in <top (required)>' Finished in 0.20943 seconds (files took 8.82 seconds to load) 22 examples, 1 failure Failed examples: rspec ./spec/models/user_spec.rb:98 # User ユーザー新規登録 新規登録できないとき emailに@が含まれていない場合登録できない
該当のソースコード
user_spec.rb
RSpec
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 it 'nickname、email、password、password_confirmation、last_name、first_name、 11 last_name_kana、first_name_kana、birthdayが存在すれば登録できる' do 12 expect(@user).to be_valid 13 end 14 15 it 'passwordが6文字以上であれば登録できる' do 16 @user.password = '890iop' 17 @user.password_confirmation = '890iop' 18 expect(@user).to be_valid 19 end 20 end 21 22 context '新規登録できないとき' do 23 it 'nicknameが空では登録できない' do 24 @user.nickname = '' 25 @user.valid? 26 expect(@user.errors.full_messages).to include("Nickname can't be blank") 27 end 28 29 it 'emailが空では登録できない' do 30 @user.email = '' 31 @user.valid? 32 expect(@user.errors.full_messages).to include("Email can't be blank") 33 end 34 35 it 'passwordが空では登録できない' do 36 @user.password = '' 37 @user.valid? 38 expect(@user.errors.full_messages).to include("Password can't be blank") 39 end 40 41 it 'password_confirmationが空では登録できない' do 42 @user.password_confirmation = '' 43 @user.valid? 44 expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password") 45 end 46 47 it 'last_nameが空では登録できない' do 48 @user.last_name = '' 49 @user.valid? 50 expect(@user.errors.full_messages).to include("Last name can't be blank") 51 end 52 53 it 'first_nameが空では登録できない' do 54 @user.first_name = '' 55 @user.valid? 56 expect(@user.errors.full_messages).to include("First name can't be blank") 57 end 58 59 it 'last_name_kanaが空では登録できない' do 60 @user.last_name_kana = '' 61 @user.valid? 62 expect(@user.errors.full_messages).to include("Last name kana can't be blank") 63 end 64 65 it 'first_name_kanaが空では登録できない' do 66 @user.first_name_kana = '' 67 @user.valid? 68 expect(@user.errors.full_messages).to include("First name kana can't be blank") 69 end 70 71 it 'birthdayが空では登録できない' do 72 @user.birthday = '' 73 @user.valid? 74 expect(@user.errors.full_messages).to include("Birthday can't be blank") 75 end 76 77 it 'passwordが5文字以下であれば登録できない' do 78 @user.password = '890io' 79 @user.password_confirmation = '890io' 80 @user.valid? 81 expect(@user.errors.full_messages).to include('Password is too short (minimum is 6 characters)') 82 end 83 84 it 'passwordとpassword_confirmationが不一致では登録できない' do 85 @user.password = '890iop' 86 @user.password_confirmation = '123qwe' 87 @user.valid? 88 expect(@user.errors.full_messages).to include("Password confirmation doesn't match Password") 89 end 90 91 it '重複したemailが存在する場合登録できない' do 92 @user.save 93 another_user = FactoryBot.build(:user, email: @user.email) 94 another_user.valid? 95 expect(another_user.errors.full_messages).to include('Email has already been taken') 96 end 97 98 it 'emailに@が含まれていない場合登録できない' do # 該当箇所 99 @user.email = hogehuga.com 100 @user.valid? 101 expect(@user.errors.full_messages).to include('Email is invalid') 102 end 103 104 it 'passwordが半角英数字混合でなければ登録できない(英字のみ)' do 105 @user.password = 'asdzxc' 106 @user.password_confirmation = 'asdzxc' 107 @user.valid? 108 expect(@user.errors.full_messages).to include('Password は半角英数字混合で設定してください') 109 end 110 111 it 'passwordが半角英数字混合でなければ登録できない(数字のみ)' do 112 @user.password = '123456' 113 @user.password_confirmation = '123456' 114 @user.valid? 115 expect(@user.errors.full_messages).to include('Password は半角英数字混合で設定してください') 116 end 117 118 it 'passwordが半角でなければ登録できない' do 119 @user.password = 'ABc123' 120 @user.password_confirmation = 'ABc123' 121 @user.valid? 122 expect(@user.errors.full_messages).to include('Password は半角英数字混合で設定してください') 123 end 124 125 it 'last_nameが全角文字でなければ登録できない' do 126 @user.last_name = 'hoge' 127 @user.valid? 128 expect(@user.errors.full_messages).to include('Last name には全角文字を使用してください') 129 end 130 131 it 'first_nameが全角文字でなければ登録できない' do 132 @user.first_name = 'huga' 133 @user.valid? 134 expect(@user.errors.full_messages).to include('First name には全角文字を使用してください') 135 end 136 137 it 'last_name_kanaが全角カタカナでなければ登録できない' do 138 @user.last_name_kana = 'あああああ' 139 @user.valid? 140 expect(@user.errors.full_messages).to include('Last name kana には全角カタカナを使用してください') 141 end 142 143 it 'first_name_kanaが全角カタカナでなければ登録できない' do 144 @user.first_name_kana = 'アアアアア' 145 @user.valid? 146 expect(@user.errors.full_messages).to include('First name kana には全角カタカナを使用してください') 147 end 148 end 149 end 150end 151
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 7 PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze 8 validates_format_of :password, with: PASSWORD_REGEX, message: 'は半角英数字混合で設定してください' 9 10 with_options presence: true, format: { with: /\A[ぁ-んァ-ヶー-龥々]+\z/, message: 'には全角文字を使用してください' } do 11 validates :last_name 12 validates :first_name 13 end 14 15 with_options presence: true, format: { with: /\A[ァ-ヶ]+\z/, message: 'には全角カタカナを使用してください' } do 16 validates :last_name_kana 17 validates :first_name_kana 18 end 19 20 validates :nickname, presence: true 21 validates :birthday, presence: true 22end
試したこと
バリデーションの変更が必要かと思いましたが、devise
を導入しているため
email
に関しての**「@が含まなければ登録できない」**バリデーションは標準でついているはずです。
上記のことからバリデーションの変更は必要ないと判断しました。
補足情報(FW/ツールのバージョンなど)
Ruby
Ruby on Rails
devise
RSpec
Faker
FactoryBot
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/09 09:32