class UploadForm
include ActiveModel::Model
attr_accessor :upload_file
validates_each :upload_file do |record, attr, value|
if value.present? && value.size > 1.megabytes
record.errors.add(attr, 'ファイルサイズがビッグだね')
end
end
end
describe UploadForm do
describe 'バリデーション' do
describe 'upload_file' do
context 'アップロードしたファイルサイズがビッグな場合' do
before do
filename = 'invalid.pdf'
filepath = File.join(Rails.root, "spec/fixtures/files/#{filename}")
@upload_file = ActionDispatch::Http::UploadedFile.new(
filename: File.basename(filepath),
tempfile: File.open(filepath)
)
end
let(:upload_form) { UploadForm.new({ upload_file: @upload_file }) }
it 'バリデーションエラーが起きること' do
upload_form.valid?
expect(upload_form).to have(1).errors_on(:upload_file)
end
end
end
end
end