Rspec для загрузки файла с параметрами

Я пытаюсь написать спецификацию для тестирования функции загрузки, и реализация кода работает, как и ожидалось, однако, когда я пытался написать спецификацию, я не смог выяснить, почему во время обмена данными происходит сбой JSON.parse, [ Rails 5.X ]

метод

def upload
  #some validation
  begin
    puts params[:file]
    json = JSON.parse(params[:file].read)
    #rest of the validation
  rescue StandardError, JSON::ParserError, HttpServices::BadHttpResponseError
      flash[:style] = :error
  end
end

Spec:

describe "upload" do
  before do
    read = file_fixture("empy_details.json").read
    @file = Hash.new
    @file['emp'] = read #debugger > @file:{emp: [{"name":"Bob","key":"201","active":true}]}
  end

  it 'should upload' do
    post :upload, params: { :file => @file }, as: :json
    expect(flash[:style]).to eq(:success)
  end
end

Метод puts params[:file] печать

{"emp"=>"[{\"name\":\"Bob\",\"key\":\"201\",\"active\":true}]\n"} 

JSON.parse не удается в convert_hashes_to_parameters(key, value) метод и converted получает значение "[{"name":"Bob","key":"201","active":true}]" прежде чем потерпеть неудачу.

Что мне не хватает?

1 ответ

Решение

params[:file].read выдает исключение, когда файл был передан через Rspec, и я изменил код метода контроллера, чтобы приспособить params[:file] вместо.

def upload
  #some validation
  begin
    puts params[:file]
    if params[:file].respond_to?(:read)
      json = JSON.parse(params[:file].read)
    else
      json = JSON.parse(params[:file])
    end
    #rest of the validation
  rescue StandardError, JSON::ParserError, HttpServices::BadHttpResponseError
      flash[:style] = :error
  end
end
Другие вопросы по тегам