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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

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

Q&A

解決済

2回答

4752閲覧

RSpecでemailに"@を含まなければ登録できない"をテストしたい

Tsuyoponta

総合スコア5

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

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

0グッド

1クリップ

投稿2021/02/09 08:35

前提・実現したいこと

RSpecemailに**「@を含まなければ登録できない」**ことをテストしていたら
以下のようなエラーが出て詰まっています。

発生している問題・エラーメッセージ

ターミナル

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

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

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

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

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

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

guest

回答2

0

エラーメッセージのとおりです。引用符無しでhogehoge.comと書いたため、メソッド呼び出しと解釈しようとしてエラーとなっています。

投稿2021/02/09 09:01

maisumakun

総合スコア145208

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

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

Tsuyoponta

2021/02/09 09:32

回答ありがとうございます! 文字列になっていないのに気づけませんでした。 エラー読み解く力を養います。
guest

0

ベストアンサー

@user.email = hogehuga.com ↓ @user.email = 'hogehuga.com'

になりますね。文字列になっていないので、hogehuga ローカル変数の com メソッドを探しに行き、エラーになります。

投稿2021/02/09 08:48

oakbow

総合スコア227

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

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

Tsuyoponta

2021/02/09 09:27

回答ありがとうございます! ご教示いただいた通りに修正したら解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問