質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

3027閲覧

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

R_Hi-ra

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/11/12 05:43

前提・実現したいこと

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

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

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

console

1(中略) 2 Failure/Error: note_id {FactoryBot.create(:note).id} 3 4 ActiveRecord::RecordInvalid: 5 Validation failed: Images can't be blank 6(中略)

該当のmodelコード

model/note.rb

ruby

1class Note < ApplicationRecord 2 belongs_to :user 3 has_many :images 4 accepts_nested_attributes_for :images, allow_destroy: true 5 validates :title, :status, :subject, :text ,presence: true 6 validates :images, presence: true 7end

model/image.rb

ruby

1class Image < ApplicationRecord 2 mount_uploader :src, ImageUploader 3 belongs_to :note 4end 5

###該当の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に関する解消アプローチが分からないままです。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

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

ActiveRecord::RecordInvalid: Validation failed: Images can't be blank

(中略)

エラー文では、noteインスタンスを作ろうとしたけどimageが空なのでバリデーションで弾かれた

ということを言っています。 

factoryBotでnote-image間のアソシエーションを張っていないことが原因ですかね?

もしそうなら、以下が参考になると思います。
https://qiita.com/johnslith/items/c0b2a9b8ce8770e5d317

投稿2020/11/12 10:21

hukurouo

総合スコア108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問