Что-то не так с тем, как вы настраиваете изображение, с которым вы тестируете. Возможно, вы захотите обновить его до того, как команда Rails будет обрабатывать его в своих собственных тестах:
module ActiveStorageHelpers
# ported from https://github.com/rails/rails/blob/5-2-stable/activestorage/test/test_helper.rb#L57
def create_file_blob(filename: "image.jpg", content_type: "image/jpeg", metadata: nil)
ActiveStorage::Blob.create_after_upload! io: file_fixture(filename).open, filename: filename, content_type: content_type, metadata: metadata
end
end
RSpec.configure do |config|
config.include ActiveStorageHelpers
end
Затем поместите крошечный файл изображения в spec/fixtures/file/images.jpg
(вот где метод file_fixture
будет искать его) .
Имея это в виду, вы можете настроить изображение на вашей модели в вашем функциональном тесте с помощью чего-то вроде:
instance_of_model.images.attach(create_file_blob)
Я согласился бы с Kilhoffer. Попытайтесь использовать класс обертки "Фасада", который наследовался "IFacade". В Вашем Фасаде класс поместил Ваш код для потребления веб-сервиса. Таким образом Ваши контроллеры просто выполнят вызовы к Фасаду. Плюс сторона этого существа, что можно подкачать "DummyFacade", который реализует тот же интерфейс IFacade в этом, на самом деле не говорит с веб-сервисом и просто возвращает статическое содержание. Позволяет Вам на самом деле сделать некоторое поблочное тестирование, не поражая сервис. В основном та же идея как шаблон Репозитория.
Я все еще рекомендовал бы уровень служб, который может служить клиентским потребителям или серверным потребителям. Возможно даже возвращая данные во множестве форматов, в зависимости от вызывающей стороны потребления.