Rspecの画像アップロードのテストがとりません。
テストしたい内容は編集ページでアップロードした画像がマイページ、投稿詳細ページで同じものが表示されているかどうかという内容です。
user successfully upload image user#showは通るのですが、二つ目のuser successfully upload image on item#showが通りません。
ブラウザでは正常に確認できるのでテストコードがおかしいのかもしれません。
投稿詳細ページのユーザーネームにAliceが確認できるのでアソシエーションはうまくいっていると思います。
本来ならitemに紐づけられたAliceのプロフィール画像が設定されないといけないのすが、デフォルトの画像をテストコードで設定するとテストがパスしてしまうという状況です。
(**expect(page).to have_selector("img[src$='test.jpg']")**を
**expect(page).to have_selector("img[src$='noimage.jpg']")**に変更するとテストがパスしてしまいます。)
ご教授いただけますと幸いです。
エラー文
ruby
1 user successfully upload image on item#show (FAILED - 1) 2 3Failures: 4 5 1) UploadImage user successfully upload image on item#show 6 Failure/Error: expect(page).to have_selector("img[src$='test.jpg']") 7 expected to find css "img[src$='test.jpg']" but there were no matches 8 # ./spec/features/upload_image_spec.rb:24:in `block (2 levels) in <main>' 9 10Finished in 11.01 seconds (files took 1.92 seconds to load) 111 example, 1 failure 12 13Failed examples: 14 15rspec ./spec/features/upload_image_spec.rb:20 # UploadImage user successfully upload image on item#show
spec/feature/upload_image_spec.rb
ruby
1require 'rails_helper' 2 3RSpec.feature 'UploadImage', type: :feature do 4 let(:user) { FactoryBot.create(:user) } 5 let(:item) { FactoryBot.create(:item) } 6 7 #画像をアップロードして保存する 8 def upload_user_avatar(user) 9 valid_login(user) 10 visit edit_user_path(user) 11 attach_file 'user_avatar', "#{Rails.root}/spec/fixtures/images/test.jpg" 12 click_on '保存する' 13 end 14 15 scenario 'user successfully upload image user#show' do 16 upload_user_avatar(user) 17 expect(page).to have_selector("img[src$='test.jpg']") 18 end 19 20 scenario 'user successfully upload image on item#show' do 21 upload_user_avatar(user) 22 visit item_path(item) 23 expect(page).to have_content "Alice" 24 expect(page).to have_selector("img[src$='test.jpg']") 25 end 26end
factories/item.rb
ruby
1FactoryBot.define do 2 factory :item do 3 title { 'testtitle' } 4 content { 'testcontent' } 5 user_id { '1' } 6 region { '東京' } 7 association :user 8 end 9end
factories/user.rb
FactoryBot.define do factory :user do nickname { 'Alice' } sequence(:email) { |n| "exemple#{n}@example.com" } password { 'password' } activated { true } end
回答1件
あなたの回答
tips
プレビュー