ruby-on-rails 如何解决ActiveStorage::FileNotFoundError:在使用rspec运行测试时?

ttp71kqs  于 11个月前  发布在  Ruby
关注(0)|答案(1)|浏览(110)

我在运行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

uujelgoq

uujelgoq1#

我遇到了同样的问题,我最终发现,附件不会持久化到磁盘/存储解决方案中,直到在记录上调用.save
所以,在你的情况下,你可以在你的工厂里触发这个:

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'
  )
  user.save
end

字符串

相关问题