現在 Read Everyday Rails - RSpecによるRailsテスト入門 | Leanpub を参考にしながらテストコードを書いています。
モデルファイルで定義した数値バリデーションに対してfactory_bot
を利用して範囲外の数値テストをしようとしたところ
ActiveRecord::RecordInvalid
エラー
でテストが失敗となり原因がわかりません。
RSpecではそもそもmodelで定義した数値オプションのバリデーションテストは必要なのか
という点も踏まえてわかるがいらっしゃれば教えていただきますようよろしくお願いいたします(m_ _m)
エラー内容
Failure/Error: review = FactoryBot.create(:review, score: 0) ActiveRecord::RecordInvalid: Validation failed: Score must be greater than or equal to 1
###期待する動作
- modelで定義した数値オプションのバリデーションテストをパスしたい
- (疑問) そもそもmodelで定義した数値オプションのバリデーションテストは必要なのか?
###動作環境
OS:mac
Ruby:2.4.5
Ruby on Rails: 4.2.11
rspec-rails: 3.6.1
factory_bot: 5.0.2
###該当のソースコード
ruby
1# app/models/review.rb 2class Review < ActiveRecord::Base 3 # validation 4 validates :score, numericality: { only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 5 } 5end 6 7# spec/factories/reviews.rb 8FactoryBot.define do 9 factory :review do 10 sequence(:score) { [*1..5].sample } 11 end 12end 13 14 15#spec/models/review_spec.rb 16require 'rails_helper' 17 18RSpec.describe Review, type: :model do 19 it "0" do 20 review = FactoryBot.create(:review, score: 0) 21 expect(review.errors[:score]).to include("Score must be greater than or equal to 1") 22 end 23end
回答1件
あなたの回答
tips
プレビュー