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

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

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

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

Ruby on Rails

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

Q&A

0回答

2630閲覧

Rspecを使用したテストでimageが通せない。(初投稿)

atsushi0804

総合スコア1

RSpec

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/26 06:40

images_attributesでパラメーターに渡るimageがテストで通せない。

商品売買アプリをrailsにて作成中です。fields_forを使用し子モデルであるimageモデル(親モデルはitemモデル)を登録する形を取り、データベースへの登録まではうまくできるところまではできました。
テストコードをRspecとfactoryBotを使用し書いているのですが、エラーが発生してしまいます。画像投稿にはCarrierWaveを使用しています。
以下最初に問題が出ているところをあげたいと思います。

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

### bundle exec rspecするとターミナル内に表示されるエラー分

1) Item#create name,description,price,condition_id,delivery_fee_id,shipping_method_id,ship_from_area_id,shipping_day_id,category_id,brand_id,size_id,user_id,imagesが存在すれば登録できること Failure/Error: image = create(:image) ActiveRecord::RecordInvalid: バリデーションに失敗しました: Itemを入力してください # ./spec/models/item_spec.rb:16:in `block (3 levels) in <top (required)>'

item_spec.rb内の記述

require 'rails_helper' describe Item do describe '#create' do it 'name,description,price,condition_id,delivery_fee_id,shipping_method_id,ship_from_area_id,shipping_day_id,category_id,brand_id,size_id,user_id,imagesが存在すれば登録できること' do user = create(:user) category = create(:category) size = build(:size) ship_from_area = build(:ship_from_area) delivery_fee = build(:delivery_fee) shipping_day = build(:shipping_day) shipping_method = build(:shipping_method) condition = build(:condition) brand = build(:brand) image = create(:image) item = build(:item,condition_id: condition.id,delivery_fee_id: delivery_fee.id,shipping_day_id:shipping_day.id,shipping_method_id:shipping_method.id,user_id: user.id,ship_from_area_id: ship_from_area.id, category_id:category.id, size_id: size.id,brand_id:brand.id,images:image.images) expect(item).to be_valid end end end

FactoryBotのitem.rbの記述

FactoryBot.define do factory :item do id {'1'} name {"testitem"} description {"hello world it is test"} price {"5000"} end end

FactoryBotのimage.rbの記述

FactoryBot.define do factory :image do image {File.open("#{Rails.root}/public/images/test_image.jpg")} item_id {'1'} end end

itemモデルでのエラー発生箇所のバリデーション記述

itemテーブルへ登録時にimageテーブルへimageも通すためvalidates_associatedを使用すると調べたら出てきたのでこのように記述しました。(submitを押すとimageがない場合は通らなかったのでバリデーションは間違っていないはず)

validates_associated :images   validates :images, presence: true

色々とcarrierwaveを使用した画像投稿のRspecテストの記事を参考にさせていただき、factoryBotでのimageカラムへのイメージの呼び出し方が違うのかと思い書き方を参考にさせてもらいましたがそれもうまくいきませんでした。(下もその一つ。)

image { [ Rack::Test::UploadedFile.new(Rails.root.join( 'public/images/test_image')

fields_forを使用し、image_attributesという形でパラメーターが送られる形のためテスト内にもアソシエーションを組む必要があるのかな?と思いながらも書き方もわからずに止まってしまっています。

まだまだ初心者で現在の問題に対して、どのように向かい合えばいいかがわからない状況です。
どうかアドバイスをよろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問