在 factorybot 中附加 ActiveStorage 文件
Attaching ActiveStorage files in factorybot
我正在寻找一种方法来为具有活动存储附件的模型创建工厂
我尝试了this post
中的方法
我的工厂
factory :activity_fit_file, class: 'Activity' do
association :user, factory: :user
activity_type {:cycling}
original_activity_log_file { fixture_file_upload("#{Rails.root}/spec/files/example_fit_file.fit") }
end
但我遇到了这个错误
NoMethodError:
undefined method `fixture_file_upload' for #<FactoryBot::SyntaxRunner:0x000000000208c5f8>
在 ActiveStorage 中附加文件的正确方法是什么?
直接用Rack::Test::UploadedFile
试试:
file { Rack::Test::UploadedFile.new('path', 'image/png') }
将您的代码更改为以下代码即可。
include ActionDispatch::TestProcess
factory :activity_fit_file, class: 'Activity' do
association :user, factory: :user
activity_type {:cycling}
original_activity_log_file { fixture_file_upload("#{Rails.root}/spec/files/example_fit_file.fit") }
end
此解决方案适用于 rails 6:
factory :post do
# ...
after(:build) do |post|
post.image.attach(
io: File.open(Rails.root.join('test', 'fixture_files', 'test.jpg')),
filename: 'test.jpg',
content_type: 'image/jpeg'
)
end
end
我正在寻找一种方法来为具有活动存储附件的模型创建工厂
我尝试了this post
中的方法我的工厂
factory :activity_fit_file, class: 'Activity' do
association :user, factory: :user
activity_type {:cycling}
original_activity_log_file { fixture_file_upload("#{Rails.root}/spec/files/example_fit_file.fit") }
end
但我遇到了这个错误
NoMethodError:
undefined method `fixture_file_upload' for #<FactoryBot::SyntaxRunner:0x000000000208c5f8>
在 ActiveStorage 中附加文件的正确方法是什么?
直接用Rack::Test::UploadedFile
试试:
file { Rack::Test::UploadedFile.new('path', 'image/png') }
将您的代码更改为以下代码即可。
include ActionDispatch::TestProcess
factory :activity_fit_file, class: 'Activity' do
association :user, factory: :user
activity_type {:cycling}
original_activity_log_file { fixture_file_upload("#{Rails.root}/spec/files/example_fit_file.fit") }
end
此解决方案适用于 rails 6:
factory :post do
# ...
after(:build) do |post|
post.image.attach(
io: File.open(Rails.root.join('test', 'fixture_files', 'test.jpg')),
filename: 'test.jpg',
content_type: 'image/jpeg'
)
end
end