やろうとしたこと
ActiveStorageを使用したモデルでname
カラムの変更テストをした際、ActiveSupport::MessageVerifier::InvalidSignature
が原因で失敗することがありました。
hoge.rb
class Hoge < ApplicationRecord
.
.
.
has_one_attached :attached
.
.
.
end
hoge_factory.rb
FactoryBot.define do
factory :hoge do
name { Faker::Name.name }
.
.
.
attached { fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'test.jpg'), 'image/jpg') }
.
.
.
trait :edit do
name "HOGE"
end
end
end
hoges_spec.rb
require 'rails_helper'
RSpec.describe "Hoges", type: :request do
.
.
.
describe 'PUT #update' do
let!(:hoge) { create(:hoge) }
context 'when sign_in admin user' do
before do
sign_in @admin_user
end
it 'can update name' do
# テストが失敗したので、例外の内容を出力してみると、「ActiveSupport::MessageVerifier::InvalidSignature」だった
expect do
put bad_report_url bad_report, params: { bad_report: attributes_for(:bad_report, :edit) }
end.to change { BadReport.find(hoge.id).name }.from(hoge.name).to("HOGE")
end
end
end
.
.
.
end
解決策
after(:build)
の中でfixture_file_uploadするようにします。
- attached { fixture_file_upload Rails.root.join('spec', 'fixtures', 'files', 'test.jpg'), 'image/jpg' }
+
+ after(:build) do |hoge|
+ hoge.attached = fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'test.jpg'), 'image/jpg')
+ end