Rails在rspec测试中提供ActiveStorage映像

Rails在rspec测试中提供ActiveStorage映像,rspec,rails-activestorage,Rspec,Rails Activestorage,在开发和生产中,我们可以在浏览器中访问图像。在测试运行时,这不适用于测试环境 我们用于图像的URL的格式如下: http://localhost:3000/images/ABC # for development. Port for tests is 3030 :并重定向到ActiveStorage附件服务URL-如下所示: http://localhost:3000/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJa

在开发和生产中,我们可以在浏览器中访问图像。在测试运行时,这不适用于测试环境

我们用于图像的URL的格式如下:

http://localhost:3000/images/ABC # for development. Port for tests is 3030
:并重定向到ActiveStorage附件服务URL-如下所示:

http://localhost:3000/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaDFTVEd0WlpUbHFlVGh0YW1od1JucEdkMUJuYWxaelNuSUdPZ1pGVkE9PSIsImV4cCI6IjIwMTgtMDYtMDhUMDc6MDM6MDUuNDI2WiIsInB1ciI6ImJsb2Jfa2V5In19--abef581f4df7a19ae1a35a2be03edd028659441f/454.jpg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22454.jpg%22%3B+filename%2A%3DUTF-8%27%27454.jpg

在测试运行时使用(binding.pry-like thing),我们可以确定设置是否正确(或者是否正确):

:它确实返回了一个~3.5MiB的图像。但是,当将页面保存为HTML(“blah.HTML”)时,当byebug运行时打开该HTML时,图像不会加载-对
…images/ABC
的调用被拒绝

这是一个问题,因为我们正在使用wicked_pdf生成pdf,并且在生成pdf的测试环境中,它无法访问这些图像以放入pdf

也许可以让测试服务器在rspec之外提供响应?否则,PDF中将没有图像


附加说明-环境配置 在测试中,我们添加了:

before do
  host! 'localhost:3030'
end
:虽然显然是
主机已弃用。当我们尝试将它重新定位到
/rails\u helper.rb
时,它破坏了一系列其他测试

/config/environments/test.rb
中,我们有以下内容:

Rails.application.configure do
  config.active_storage.service = :test
  config.consider_all_requests_local = true
  config.action_controller.perform_caching = false
  config.host = 'localhost:3030'
  config.action_controller.default_url_options = { host: 'localhost:3030' }
  config.assets.compile = true
  config.allow_concurrency = true
end
/config/storage.yml
中正确配置了活动存储器:

test:
  service: Disk
  root: <%= Rails.root.join("tmp/test_storage") %>
测试:
服务:磁盘
根目录:

您解决过这个问题吗?我在Prawn PDF generator中的ActiveStorage附件中遇到了类似的问题。啊哈!是的,对不起,同事说测试是单线程的,所以没有解决方案。我们采用了存根法。但这并不是一个真正的解决方案。。。你对对虾的问题是否超出测试范围?如果是这样的话,请提出一个单独的问题,并在评论中添加一个链接Thank@xxjjnn,虽然我在Prawn中遇到了这个问题,但这似乎是一个与在测试环境中访问文件有关的更普遍的问题。详情如下:
test:
  service: Disk
  root: <%= Rails.root.join("tmp/test_storage") %>