Rails在rspec测试中提供ActiveStorage映像

时间:2018-06-08 08:05:41

标签: rspec rails-activestorage

在开发和制作中,我们可以在浏览器中访问图像。在测试运行时,这对测试环境不起作用。

我们用于图片的网址格式如下:

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

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

(byebug) @request.host
"localhost"
(byebug) @request.port
3030
(byebug) File.open("blah.html", 'w'){|file| file.write(response.body)}
1854
(byebug) get(image_source_path(id: 'ABC'))
302
(byebug) response.redirect_url
"http://localhost:3030/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaDEwUWpkVmRFeHJUalV5YUdsYU5XOUdPR0Y2UVZCVFpsb0dPZ1pGVkE9PSIsImV4cCI6IjIwMTgtMDYtMDhUMDc6MjU6NDEuNzkzWiIsInB1ciI6ImJsb2Jfa2V5In19--42f8cd5ca06b07704a6550a19aaa143a6eeb0c6e/pig_admirer.jpg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22pig_admirer.jpg%22%3B+filename%2A%3DUTF-8%27%27pig_admirer.jpg"
(byebug) get(response.redirect_url)
200
(byebug) response.content_length
3618075

:它确实返回了~3.5MiB图像。但是,当将页面保存为HTML(在该序列中为'blah.html')时,当byebug正在运行时打开该HTML时,图像无法加载 - 对...images/ABC的调用将被拒绝。

这是一个问题,因为我们使用wicked_pdf生成PDF,而在测试环境中生成PDF时,它无法访问这些图像以放入PDF中。

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

附加说明 - 环境配置

在测试中我们添加了:

before do
  host! 'localhost:3030'
end

:虽然显然{@ 1}}已被弃用。当我们尝试将其重新定位到host!时,它打破了一大堆其他测试。

/rails_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

0 个答案:

没有答案