Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Rspec単体テスト】Validation failed: Images can't be blankの解消法

前提・実現したいこと

投稿型アプリのmodelの単体テストで
bundle exec rspecを実行すると以下のエラーが発生します。

以下のエラー内容を解消してrspec単体テストを実行したいです。

発生している問題・エラーメッセージ

(中略)
    Failure/Error: note_id {FactoryBot.create(:note).id}

     ActiveRecord::RecordInvalid:
       Validation failed: Images can't be blank
(中略)

該当のmodelコード

model/note.rb
class Note < ApplicationRecord
  belongs_to :user
  has_many :images
  accepts_nested_attributes_for :images, allow_destroy: true
  validates :title, :status, :subject, :text ,presence: true
  validates :images, presence: true
end
model/image.rb
class Image < ApplicationRecord
  mount_uploader :src, ImageUploader
  belongs_to :note
end

該当のspecコード

spec/model/image_spec.rb
require 'rails_helper'

describe Image do
  describe '#create'do
  it 'note_id(外部キー)が存在すれば投稿可' do
    image = build(:image)
    expect(image).to be_valid
  end
  end
end
spec/model/note_spec.rb
require 'rails_helper'
describe Note do
  describe '#create' do

    it '必須項目が全て入力できていたら投稿可' do
      Image = FactoryBot.create(:image).id
      note = build(:note)
      expect(note).to be_valid
    end

    it 'ノートタイトルがない場合は投稿不可' do
      note = build(:note, title: nil)
      note.valid?
      expect(note.errors[:title]).to include("can't be blank")
    end

    it '対象が選択されていない場合は投稿不可' do
      note = build(:note, status: nil)
      note.valid?
      expect(note.errors[:status]).to include("can't be blank")
    end

    it '科目が選択されていない場合は投稿不可' do
      note = build(:note, subject: nil)
      note.valid?
      expect(note.errors[:subject]).to include("can't be blank")
    end

    it 'ノート説明が記入されていない場合は投稿不可' do
      note = build(:note, text: nil)
      note.valid?
      expect(note.errors[:text]).to include("can't be blank")
    end
  end
end

試したこと

こちらの記事を参考に外部キーを用いた
単体テストの記入を試みた。
結果、userに関しては解消できた。

しかし、エラーメッセージのImageに関する解消アプローチが分からないままです。

ご意見のほどよろしくお願いします。

0

1Answer

imageのpresence制約に引っかかっているみたいです。factory_botのnoteの定義でimagesをあらかじめ作成するような実装をする必要がありそうです(factory_botのコードが無いので具体的にどこを直せば良いかまではお答えできなそうです)

1Like

Your answer might help someone💌