rspecを用いた単体テストの記述法がわかりません
バリデーションで正規表現を使ってカタカナ以外の登録を無効にしたくて以下のコードを書いたのですが
テストを試すと、、、
NoMethodError: undefined method valid?' for "たなか":String
valid?メソッドが見当たらないよっと言われてしまって困惑しています。
テストではひらがな!漢字!アルファベット!
は無効にしたいので配列を作りそれぞれをvalid?メソッドでバリデーションを当てれば良いだろうと思ったのですがこれじゃ何がダメなのでしょうか(泣)
[※factoriesは一応載せたのですが使わずに検証しています]
コードが冗長になるとご迷惑だと思い勝手ながら関係ないと思った箇所は消した上でコードをのさせていただいてます
models/user.rb class User < ApplicationRecord [他の記述は省略しています] validates :first_name, presence: true validates :last_name, presence: true validates :first_name_kana, presence: true, format: { with: /\A[ァ-ヴ]+\z/ } validates :last_name_kana, presence: true, format: { with: /\A[ァ-ヴ]+\z/ } validates :birthday, presence: true end
spec/factories FactoryBot.define do factory :user do nickname {'tanaka'} email {'sample@sample.com'} password {'abcdef123456'} password_confirmation {'abcdef123456'} first_name {'田中'} last_name {'太郎'} first_name_kana {'タナカ'} last_name_kana {'タロウ'} birthday {'19950101'} end end
spec/models/user_spec.rb require 'rails_helper' describe User do describe '#create' do it 'is first name format invalid' do users = Array.new(['たなか', '田中', 'tanaka']) users.each do |user| user.valid? expect(user.erros[:first_name_kana]).to include('は不正な値です') end end end end
あなたの回答
tips
プレビュー