【RSpec】 프로필 이미지 업로드 테스트를 작성해 보았습니다.
【환경】
테스트 코드
시스템 스펙으로 테스트를 실시하고 있습니다.
spec/system/upload_avatar_spec.rb
require 'rails_helper'
RSpec.describe'UploadImage', type: :system do
let(:user) { FactoryBot.create(:user) }
let(:item) { FactoryBot.create(:item, user_id: user.id) }
#画像をアップロードして保存する
def upload_user_avatar(user)
valid_login(user)
visit edit_user_path(user)
attach_file 'user_avatar', "#{Rails.root}/spec/fixtures/images/test.jpg"
click_on '保存する'
end
it 'user successfully upload image user#show' do
upload_user_avatar(user)
expect(page).to have_selector("img[src$='test.jpg']")
end
it 'user successfully upload image on item#show' do
upload_user_avatar(user)
visit item_path(item)
expect(page).to have_selector("img[src$='test.jpg']")
end
end
valid_login 메소드는
spec/support/login_support.rb
에 정의되어 있습니다.이 폴더에 정의한 메서드는 테스트 시 호출할 수 있습니다.
내 앱에서 로그인 한 상태가 아니면 edit_user_path에 액세스 할 수 없으므로이 코드를 작성했습니다. 쓰지 않으면 실패합니다. (실패하지 않으면 안된다)
spec/support/login_support.rb
module LoginSupport
def valid_login(user)
visit root_path
click_link 'ログイン'
fill_in 'session[email]', with: user.email
fill_in 'session[password]', with: user.password
click_button 'ログイン'
end
end
차례로 해설해 갑니다.
먼저 FactoryBot에서 user와 item 테스트 데이터를 생성합니다.
(미리
spec/factries/
에 테스트 데이터를 정의해야 합니다. 여기서는 생략하겠습니다.)이미지를 업로드하는 행위는 모든 블록에서 공통적으로 이루어지므로 upload_user_avatar 메소드로 함께 정의합니다.
이 메소드는 로그인하여 사용자의 편집 페이지로 이동하여 attach_file 메소드를 사용하여 테스트용 이미지 데이터를 업로드하고 저장합니다.
미리
/spec/fixtures/images/
에 테스트 이미지를 준비해야 합니다.또, attach_file 메소드의 인수에는 f.file_field로 생성되는 input 태그의 id를 지정하면 잘 되었습니다! (이미지 참조. 생성되는 HTML은 개발자 도구에서 확인할 수 있습니다.)
이번에는 2개의 테스트를 실시하고 있습니다.
첫 번째는 이미지가 업로드되면 컨트롤러에 지정된 리디렉션 대상에 이미지 데이터가 있는지 확인하는 것입니다.
have_selector를 사용하여 img 태그의 src 속성에 test.jpg 이미지 데이터가 포함되어 있는지 확인합니다.
둘째로 하는 일은 거의 같습니다. 같은 이미지가 게시 세부 정보 페이지에서도 사용되므로 게시 세부 정보 페이지로 이동하여 have_selector를 사용하여 img 태그의 src 속성에 test.jpg 이미지 데이터가 포함되어 있는지 확인합니다.
끝까지 읽어 주셔서 감사합니다!
매일 학습한 것을 출력하고 있습니다! ! 감상이나 지적 있으면 댓글 주시면 기쁩니다! !
Reference
이 문제에 관하여(【RSpec】 프로필 이미지 업로드 테스트를 작성해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kiyo_Karl2/items/093f4d975978da0214ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)