###前提・実現したいこと
画像保存のバリデーションのテスト
###発生している問題・エラーメッセージ
問題は画像をテスト環境で作成した際に、image_urlがnilになってしまうことです。
1) CaptureImage#main_image? valid with main_image Failure/Error: expect(capture_image).to be_valid expected #<CaptureImage id: nil, image_url: nil, prototype_id: 60, created_at: nil, updated_at: nil, satus: 0> to be valid, but got errors: Image url can't be blank
###該当のソースコード
ruby
1describe "#main_image?" do 2 it "valid with main_image" do 3 capture_image = build(:capture_image) 4 binding.pry 5 expect(capture_image).to be_valid 6 end 7 end
ruby
1factory :capture_image do 2 status "main_image" 3 image_url { Faker::Avatar.image } 4 association :prototype 5 end
ruby
1class CaptureImage < ActiveRecord::Base 2 belongs_to :prototype 3 enum satus: {main_image: 0, sub_image: 1} 4 mount_uploader :image_url, ImageUploader 5 validates :image_url, presence: true, if: :main_image? 6 7 def main_image? 8 status == "main_image" 9 end 10end
※capture_imageモデル追加しました。(修正)
(enumでmain_imageかsub_imageか管理しています)
###試したこと
上記のように実装して、binding.pryが起きたところで止めて確認しても、
#<CaptureImage:0x007fe1d98d4c68 id: nil, image_url: nil, prototype_id: 60, created_at: nil, updated_at: nil, satus: 0>
このようになってしまい
[1] pry(#<RSpec::ExampleGroups::CaptureImage::MainImage>)> capture_image.image_url = "gggg.png" => "gggg.png" [2] pry(#<RSpec::ExampleGroups::CaptureImage::MainImage>)> capture_image => #<CaptureImage:0x007ffc97d33f60 id: nil, image_url: nil, prototype_id: 68, created_at: nil, updated_at: nil, satus: 0> [3] pry(#<RSpec::ExampleGroups::CaptureImage::MainImage>)>
このようにimage_urlが入ってきません。。。
テストを通りません。
ちなみに、
[1] pry(#<RSpec::ExampleGroups::CaptureImage::MainImage>)> capture_image.status = "sub_image"
とすると、statusは普通に1に変わります。なぜかimage_urlだけ追加・変更不可です。