我在运行rspec的时候收到了一个使用ActiveStorage找不到文件的错误,我不知道是什么问题。这就是它的设置。
存储.yml
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
字符串
配置/环境/测试.rb
config.active_storage.service = :test
型
工厂
factory :user do
membership_approval { Rack::Test::UploadedFile.new("#{Register::Engine.root}/spec/fixtures/membership.pdf", 'application/pdf') }
end
型
邮件示例
def mail_example(user:)
filename = user.membership_approval.filename.to_s
attachments[filename] = user.membership_approval.download
mail(
...
)
end
型
当我运行rspec时,当它试图下载文件时,我收到以下错误消息。
错误消息
ActiveStorage::FileNotFoundError:
# ------------------
# --- Caused by: ---
# Errno::ENOENT:
# No such file or directory @ rb_sysopen - /Users/myuser/Projects/my_project/tmp/storage/nd/5h/nd5hlet2n2xa673f8v11ljbnru72
型
它在其他方面工作得很好,但我就是不能让它与rspec一起工作。当我在rspec中调试时,文件看起来像是附加到对象上的,但实际上并没有存储在任何地方。有什么想法吗?
最好的祝愿。
编辑
我也在工厂里试过这种方法,但没有运气,我还是得到了同样的错误。
after(:build) do |user|
user.membership_approval.attach(
io: File.open("#{Register::Engine.root}/spec/fixtures/membership.pdf"),
filename: 'membership.pdf',
content_type: 'application/pdf'
)
end
型
1条答案
按热度按时间uujelgoq1#
我遇到了同样的问题,我最终发现,附件不会持久化到磁盘/存储解决方案中,直到在记录上调用
.save
。所以,在你的情况下,你可以在你的工厂里触发这个:
字符串