Загрузка изображения с RSpec имеет неожиданный класс на контроллере - PullRequest
0 голосов
/ 17 октября 2019

У меня проблемы с RSpec и fixture_file_upload при отправке запроса.

Вот проблема: я пытаюсь отправить изображение с помощью загрузки, чтобы создать категорию с изображением, но когда изображение прибывает, он меняет тип своего класса.

Я жду, чтобы получить params[:category][:image] ActionDispatch::Http::UploadedFile, но я получаю ActionController::Parameters.

Пример моего запроса:

    context 'when creates a new main category with valid params' do
      let(:category) do
        { category: { name: 'Bolos E bolos',
                      description: 'São bolos sim',
                      locale: 'pt-BR',
                      image: fixture_file_upload('images/test-image.png', 'image/png') } }
      end

      post '/v4/categories' do
        it 'upload image' do
          expect { do_request(category) }.to change { ActiveStorage::Blob.count }.from(0).to(1)
        end
      end
    end

что я получил:

Failure/Error: expect { do_request(category) }.to change { ActiveStorage::Blob.count }.by(1)
       expected `ActiveStorage::Blob.count` to have changed by 1, but was changed by 0 

Как отправить изображение в виде загрузки и получить его на контроллере как ActionDispatch::Http::UploadedFile вместо ActionController::Parameters

1 Ответ

1 голос
/ 19 октября 2019

Я не смог заставить работать вашу спецификацию контроллера, но мне удалось получить работающую эквивалентную спецификацию запроса. Потратив 45+ минут на то, чтобы никуда не деваться, я думаю, что это лучшее, что я могу сделать. Это похоже на работу. (Просто убедитесь, что у вас есть avatar.jpg в общей папке вашего приложения rails.)

## spec/requests/user_spec.rb
require 'rails_helper'

RSpec.describe "Users", type: :request do

  describe "it attaches uploaded files" do
    it 'attaches the uploaded file' do
      file = fixture_file_upload(Rails.root.join('public', 'avatar.jpg'), 'image/jpg')
      expect {
        post api_users_path, params: { user: {username: "Ben", avatar: file } }
      }.to change(ActiveStorage::Attachment, :count).by(1)
    end
  end
end
...