【Rails】RSpec에 의한 ActiveStorege로 업로드한 이미지 테스트
소개
RSpec으로 모델 테스트를 쓰고 있을 때 ActiveStorage에서 모델에 관련시킨 이미지의 밸리데이션 곳에서 집계했기 때문에 메모.
RSpec과 FactoryBot을 사용한다. (여기에서는 설치 부분은 생략)
할 일
음악 리뷰 앱의 Record 모델에 붙인 이미지( :jacket
)가 비었을 때는 에러를 표시한다.
모델
Record 모델은 Genre 모델을 묶고 있습니다.
Genre 모델은 (일부 생략)
app/models/genre.rbclass Genre < ApplicationRecord
has_many :records
end
Record 모델은 (일부 생략)
app/models/record.rbclass Record < ApplicationRecord
belongs_to :genre
has_one_attached :jacket #一つの画像
validate :jacket_presence #画像のバリデーション
def jacket_presence
unless jacket.attached?
errors.add(:jacket, 'must be attached')
end
end
end
has_one_attached :jacket
jacket_presence
메서드에 이미지가 없으면 오류 메시지를 추가합니다.
테스트용 이미지 준비
우선 public
디렉토리에 jackets
파일을 추가하고,
거기에 하나의 이미지를 추가합니다.
여기에 justin.jpg
파일이 public/jackets
에 추가되었습니다.
FactoryBot 편집
우선은 Genre
를 편집한다.
spec/factories/genre.rbFactoryBot.define do
factory :genre do
name { "Pop" }
end
end
다음은 Record
를 편집한다.
spec/factories/record.rbFactoryBot.define do
factory :record do
name { "Justice" }
release_year { 2021 }
artist { "Justin Bieber" }
#genreとのアソシエーションは、
#genre_id { 1 } でなく、以下のように書く
genre
#recordモデル作成後:jacketを関連づける。
after(:build) do |record|
record.jacket.attach(io: File.open('public/jackets/justin.jpg'), filename: 'justin.jpg')
end
end
end
이것으로 테스트용 모델 작성 준비가 완료.
테스트 파일 편집
Record
의 모델 테스트를 편집한다.
spec/models/record_spec.rbrequire 'rails_helper'
RSpec.describe Record, type: :model do
describe 'create new record'do
before do #テスト用のRecordを作成
genre = FactoryBot.create(:genre)
@record = FactoryBot.create(:record)
end
#全ての項目があれば有効。
context 'with a name, release_year, artist, genre, and jacket' do
it "is valid" do
record = @record
expect(record).to be_valid
end
end
#:jacketなしの場合はエラー
context 'without a jacket' do
it "is invalid" do
@record.jacket = nil #:jacketを空にする。
record = @record
record.valid?
#エラーメッセージが追加される。
expect(record.errors[:jacket]).to include("must be attached")
end
end
end
end
Record
는 Genre
에 묶여 있기 때문에 먼저 genre
를 만들고 있다.
이제 테스트 할 수있었습니다.
Reference
이 문제에 관하여(【Rails】RSpec에 의한 ActiveStorege로 업로드한 이미지 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tempalaa/items/ad38c2081a8effece484
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Record 모델은 Genre 모델을 묶고 있습니다.
Genre 모델은 (일부 생략)
app/models/genre.rb
class Genre < ApplicationRecord
has_many :records
end
Record 모델은 (일부 생략)
app/models/record.rb
class Record < ApplicationRecord
belongs_to :genre
has_one_attached :jacket #一つの画像
validate :jacket_presence #画像のバリデーション
def jacket_presence
unless jacket.attached?
errors.add(:jacket, 'must be attached')
end
end
end
has_one_attached :jacket
jacket_presence
메서드에 이미지가 없으면 오류 메시지를 추가합니다.테스트용 이미지 준비
우선 public
디렉토리에 jackets
파일을 추가하고,
거기에 하나의 이미지를 추가합니다.
여기에 justin.jpg
파일이 public/jackets
에 추가되었습니다.
FactoryBot 편집
우선은 Genre
를 편집한다.
spec/factories/genre.rbFactoryBot.define do
factory :genre do
name { "Pop" }
end
end
다음은 Record
를 편집한다.
spec/factories/record.rbFactoryBot.define do
factory :record do
name { "Justice" }
release_year { 2021 }
artist { "Justin Bieber" }
#genreとのアソシエーションは、
#genre_id { 1 } でなく、以下のように書く
genre
#recordモデル作成後:jacketを関連づける。
after(:build) do |record|
record.jacket.attach(io: File.open('public/jackets/justin.jpg'), filename: 'justin.jpg')
end
end
end
이것으로 테스트용 모델 작성 준비가 완료.
테스트 파일 편집
Record
의 모델 테스트를 편집한다.
spec/models/record_spec.rbrequire 'rails_helper'
RSpec.describe Record, type: :model do
describe 'create new record'do
before do #テスト用のRecordを作成
genre = FactoryBot.create(:genre)
@record = FactoryBot.create(:record)
end
#全ての項目があれば有効。
context 'with a name, release_year, artist, genre, and jacket' do
it "is valid" do
record = @record
expect(record).to be_valid
end
end
#:jacketなしの場合はエラー
context 'without a jacket' do
it "is invalid" do
@record.jacket = nil #:jacketを空にする。
record = @record
record.valid?
#エラーメッセージが追加される。
expect(record.errors[:jacket]).to include("must be attached")
end
end
end
end
Record
는 Genre
에 묶여 있기 때문에 먼저 genre
를 만들고 있다.
이제 테스트 할 수있었습니다.
Reference
이 문제에 관하여(【Rails】RSpec에 의한 ActiveStorege로 업로드한 이미지 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tempalaa/items/ad38c2081a8effece484
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선은
Genre
를 편집한다.spec/factories/genre.rb
FactoryBot.define do
factory :genre do
name { "Pop" }
end
end
다음은
Record
를 편집한다.spec/factories/record.rb
FactoryBot.define do
factory :record do
name { "Justice" }
release_year { 2021 }
artist { "Justin Bieber" }
#genreとのアソシエーションは、
#genre_id { 1 } でなく、以下のように書く
genre
#recordモデル作成後:jacketを関連づける。
after(:build) do |record|
record.jacket.attach(io: File.open('public/jackets/justin.jpg'), filename: 'justin.jpg')
end
end
end
이것으로 테스트용 모델 작성 준비가 완료.
테스트 파일 편집
Record
의 모델 테스트를 편집한다.
spec/models/record_spec.rbrequire 'rails_helper'
RSpec.describe Record, type: :model do
describe 'create new record'do
before do #テスト用のRecordを作成
genre = FactoryBot.create(:genre)
@record = FactoryBot.create(:record)
end
#全ての項目があれば有効。
context 'with a name, release_year, artist, genre, and jacket' do
it "is valid" do
record = @record
expect(record).to be_valid
end
end
#:jacketなしの場合はエラー
context 'without a jacket' do
it "is invalid" do
@record.jacket = nil #:jacketを空にする。
record = @record
record.valid?
#エラーメッセージが追加される。
expect(record.errors[:jacket]).to include("must be attached")
end
end
end
end
Record
는 Genre
에 묶여 있기 때문에 먼저 genre
를 만들고 있다.
이제 테스트 할 수있었습니다.
Reference
이 문제에 관하여(【Rails】RSpec에 의한 ActiveStorege로 업로드한 이미지 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tempalaa/items/ad38c2081a8effece484
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
require 'rails_helper'
RSpec.describe Record, type: :model do
describe 'create new record'do
before do #テスト用のRecordを作成
genre = FactoryBot.create(:genre)
@record = FactoryBot.create(:record)
end
#全ての項目があれば有効。
context 'with a name, release_year, artist, genre, and jacket' do
it "is valid" do
record = @record
expect(record).to be_valid
end
end
#:jacketなしの場合はエラー
context 'without a jacket' do
it "is invalid" do
@record.jacket = nil #:jacketを空にする。
record = @record
record.valid?
#エラーメッセージが追加される。
expect(record.errors[:jacket]).to include("must be attached")
end
end
end
end
Reference
이 문제에 관하여(【Rails】RSpec에 의한 ActiveStorege로 업로드한 이미지 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tempalaa/items/ad38c2081a8effece484텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)