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

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

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

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

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

1371閲覧

Rails ユーザー登録の単体テスト、バリデーションでのエラーを解決したい

TaaShii

総合スコア5

Ruby

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

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2020/05/26 00:55

解決したいこと

フリマアプリの作成中です。
ユーザー登録で、userモデルとaddressモデルの単体テストをクリアしたい。

テスト結果(user登録)

イメージ説明

テスト結果(address登録)

イメージ説明

spec/factories/user.rb

ruby

1FactoryBot.define do 2 password = Faker::Internet.password(min_length: 7, max_length: 100) 3 4 factory :user do 5 nickname { "yamada" } 6 email { Faker::Internet.email } 7 password { password } 8 password_confirmation { password } 9 first_name { "ぜんかく" } 10 last_name { "ぜんかく" } 11 first_kana { "ゼンカクカナ" } 12 last_kana { "ゼンカクカナ" } 13 birthday { "2020-01-01" } 14 end 15end

spec/models/user_spec.rb

ruby

1require 'rails_helper' 2 3# RSpec.describe User, type: :model do 4# pending "add some examples to (or delete) #{__FILE__}" 5# end 6 7describe User do 8 describe '#create' do 9 10 it "nickname、first_name、last_name、first_kana、last_kana、email、password、password_confirmation、birthdayが存在すれば登録できること" do 11 user = build(:user) 12 expect(user).to be_valid 13 end 14 15 it "nicknameがない場合は登録できないこと" do 16 user = build(:user, nickname: nil) 17 user.valid? 18 expect(user.errors[:nickname]).to include("can't be blank") 19 end 20 21 it "emailがない場合は登録できないこと" do 22 user = build(:user, email: nil) 23 user.valid? 24 expect(user.errors[:email]).to include("can't be blank") 25 end 26 27 it "emailに@がない場合は登録できないこと " do 28 user = build(:user, email: "aaaaaa") 29 user.valid? 30 expect(user.errors[:email]).to include("is invalid") 31 end 32 33 it "重複したemailが存在する場合登録できないこと" do 34 user = create(:user) 35 another_user = build(:user, email: user.email) 36 another_user.valid? 37 expect(another_user.errors[:email]).to include("has already been taken") 38 end 39 40 it "passwordがない場合は登録できないこと" do 41 user = build(:user, password: nil) 42 user.valid? 43 expect(user.errors[:password]).to include("can't be blank") 44 end 45 46 it "passwordが7文字以上であれば登録できること" do 47 password = Faker::Internet.password(min_length: 7, max_length: 7) 48 user = build(:user, password: password, password_confirmation: password) 49 user.valid? 50 expect(user).to be_valid 51 end 52 53 it "passwordが6文字以下であれば登録できないこと" do 54 password = Faker::Internet.password(min_length: 6, max_length: 6) 55 user = build(:user, password: password, password_confirmation: password) 56 user.valid? 57 expect(user.errors[:password]).to include("is too short (minimum is 7 characters)") 58 end 59 60 it "passwordが7文字以上で、英数字の組み合わせであれば登録できること" do 61 user = build(:user, password: "abcd123", password_confirmation: "abcd123") 62 user.valid? 63 expect(user).to be_valid 64 end 65 66 it "passwordが数字のみの場合は登録できないこと" do 67 user = build(:user, password: "1234567", password_confirmation: "1234567") 68 user.valid? 69 expect(user.errors[:password]).to include("can't register with only numbers") 70 end 71 72 it "passwordが英文字のみの場合は登録できないこと" do 73 user = build(:user, password: "abcdefg", password_confirmation: "abcdefg") 74 user.valid? 75 expect(user.errors[:password]).to include("can't register with only letters") 76 end 77 78 it "password_confirmationがない場合は登録できないこと" do 79 user = build(:user, password_confirmation: nil) 80 user.valid? 81 expect(user.errors[:password_confirmation]).to include("can't be blank") 82 end 83 84 it "passwordとpassword_confirmationが一致していない場合は登録できないこと" do 85 user = build(:user, password: "abcd123", password_confirmation: "1234abc") 86 user.valid? 87 expect(user.errors[:password_confirmation]).to include("doesn't match Password") 88 end 89 90 it "first_nameがない場合は登録できないこと" do 91 user = build(:user, first_name: nil) 92 user.valid? 93 expect(user.errors[:first_name]).to include("can't be blank") 94 end 95 96 it "last_nameがない場合は登録できないこと" do 97 user = build(:user, last_name: nil) 98 user.valid? 99 expect(user.errors[:last_name]).to include("can't be blank") 100 end 101 102 it "first_kanaがない場合は登録できないこと" do 103 user = build(:user, first_kana: nil) 104 user.valid? 105 expect(user.errors[:first_kana]).to include("can't be blank") 106 end 107 108 it "last_kanaがない場合は登録できないこと" do 109 user = build(:user, last_kana: nil) 110 user.valid? 111 expect(user.errors[:last_kana]).to include("can't be blank") 112 end 113 114 it "birthdayがない場合は登録できないこと" do 115 user = build(:user, birthday: nil) 116 user.valid? 117 expect(user.errors[:birthday]).to include("can't be blank") 118 end 119 end 120 121 describe '#ぜんかく' do 122 123 it "first_nameが全角文字であれば登録できること" do 124 user = build(:user, first_name: "ぜんかく") 125 user.valid? 126 expect(user).to be_valid 127 end 128 129 it "last_nameが全角文字であれば登録できること" do 130 user = build(:user, last_name: "ぜんかく") 131 user.valid? 132 expect(user).to be_valid 133 end 134 135 end 136 137 describe '#ゼンカクカナ' do 138 139 it "first_kanaが全角カナ文字であれば登録できること" do 140 user = build(:user, first_kana: "ゼンカクカナ") 141 user.valid? 142 expect(user).to be_valid 143 end 144 145 it "last_kanaが全角カナ文字であれば登録できること" do 146 user = build(:user, last_kana: "ゼンカクカナ") 147 user.valid? 148 expect(user).to be_valid 149 end 150 151 end 152end

app/models/address.rb

ruby

1class Address < ApplicationRecord 2 extend ActiveHash::Associations::ActiveRecordExtensions 3 4 belongs_to :user, optional: true 5 belongs_to_active_hash :prefecture 6 7 VALID_ZIPCODE_REGEX = /\A\d{3}-?\d{4}\z/i 8 validates :zipcode, presence: true, 9 # 数字(3)文字、ハイフン(-)省略可、数字(4)文字になっているか 10 format: { with: VALID_ZIPCODE_REGEX, message: "ハイフンを入れて半角英数字で入力してください" } 11 validates :prefecture_id, :city, :address, presence: true 12end

spec/factories/addresses.rb

ruby

1FactoryBot.define do 2 factory :address do 3 zipcode { "123-4567" } 4 prefecture_id { 1 } 5 city { "大阪市北区" } 6 address { "中崎3-1" } 7 end 8end

spec/models/address_spec.rb

ruby

1require 'rails_helper' 2 3# RSpec.describe Address, type: :model do 4# pending "add some examples to (or delete) #{__FILE__}" 5# end 6 7describe Address do 8 describe '#create' do 9 10 it "zipcode、prefecture_id、city、addressが存在すれば登録できること" do 11 address = build(:address) 12 expect(address).to be_valid 13 end 14 15 it "zipcodeがない場合は登録できないこと" do 16 address = build(:address, zipcode: nil) 17 address.valid? 18 expect(address.errors[:zipcode]).to include("can't be blank") 19 end 20 21 it "zipcodeは7桁でないと登録できないこと" do 22 address = build(:address, zipcode: "123-4567") 23 address.valid? 24 expect(address.errors[:zipcode]).to include("doesn't enter in 7 digits") 25 end 26 27 it "prefecture_idがない場合は登録できないこと" do 28 address = build(:address, prefecture_id: nil) 29 address.valid? 30 expect(address.errors[:prefecture_id]).to include("can't be blank") 31 end 32 33 it "cityがない場合は登録できないこと" do 34 address = build(:address, city: nil) 35 address.valid? 36 expect(address.errors[:city]).to include("can't be blank") 37 end 38 39 it "addressがない場合は登録できないこと" do 40 address = build(:address, address: nil) 41 address.valid? 42 expect(address.errors[:address]).to include("can't be blank") 43 end 44 45 end 46end

正規表現、バリデーション関連にご有識のある方、ご助力お願いします。
蛇足な記述等あればそちらもご指摘いただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

画像貼り付けでなく、text貼り付けにしてもらえないかな。コピペできないし検索できないし不便。

半角にしろというエラーメッセージですね。そういうvalidationかけてませんか?
Faker::Internet.passwordは(未確認ですが)大文字、英記号を含むんじゃないかな

あと、
expectでは英語を期待し、戻ってくるのは日本語ですね、locale調整してください

投稿2020/05/26 05:24

編集2020/05/26 05:27
winterboum

総合スコア23567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問