Rails подают образы ActiveStorage в тесте rspec - PullRequest
0 голосов
/ 08 июня 2018

При разработке и производстве мы можем получить доступ к изображениям в браузере.Это не работает в тестовой среде во время выполнения тестов.

URL-адрес, который мы используем для изображений, отформатирован следующим образом:

http://localhost:3000/images/ABC # for development. Port for tests is 3030

: и перенаправляет на URL-адрес службы вложений ActiveStorage- который выглядит следующим образом:

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 (подобная привязке. вещь) во время выполнения теста мы можем убедиться, что все настроено правильно (или они?):

(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,5 МБ.Однако при сохранении страницы в виде HTML («blah.html» в этой последовательности), при открытии этого HTML во время работы byebug изображения не загружаются - вызовы ...images/ABC отклоняются.

Этоявляется проблемой, потому что мы используем wicked_pdf для генерации PDF, и в тестовой среде, когда генерируется PDF, он не может получить доступ к этим изображениям для вставки в PDF.

Возможно, можно настроить тестовый сервер для обслуживания ответовза пределами rspec?В противном случае в PDF не будет изображений.


Дополнительные примечания - конфигурация среды

В тесте мы добавили:

before do
  host! 'localhost:3030'
end

: хотя, видимо,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:

test:
  service: Disk
  root: <%= Rails.root.join("tmp/test_storage") %>
...