【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