解決したいこと
フリマアプリの作成中です。
ユーザー登録で、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
正規表現、バリデーション関連にご有識のある方、ご助力お願いします。
蛇足な記述等あればそちらもご指摘いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。