在开发和制作中,我们可以在浏览器中访问图像。在测试运行时,这对测试环境不起作用。
我们用于图片的网址格式如下:
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