RSpec преобразовывает параметры POST в строку?(тестирование загрузчика файлов) - PullRequest
6 голосов
/ 31 октября 2011

Я использую этот блок кода для имитации способа загрузки файлов:

def mock_file
  file = File.new((Rails.root + "public/checklist_items_template.csv"),"r")
  image = ActionDispatch::Http::UploadedFile.new(
          :filename => "checklist_items_template.csv", 
          :type => "text/csv", 
          :head => "Content-Disposition: form-data;
                    name=\"checklist_items_template.csv\"; 
                    filename=\"checklist_items_template.csv\" 
                    Content-Type: text/csv\r\n",
          :tempfile => file)
  return image
end

В тесте rspec POST'd для контроллера:

post :create, :legal_register_id => "1", :register => {"file" => mock_file}

Ноон разрывает эту строку в фактическом контроллере:

CSV.parse(params[:register][:file].read.force_encoding('UTF-8'))

Поскольку params [: register] [: file] интерпретируется как строка вместо объекта actiondispatch:

undefined method `read' for "#<ActionDispatch::Http::UploadedFile:0x00000108de3da8>":String

Isэто стандартное поведение для rspec?Есть ли способ передавать объекты через параметры?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2012

Это не RSpec, который конвертирует ваши параметры param в строки, это Rails 3.1.

Вы можете обойти это, используя fixture_file_upload, как описано в этот ответ .

0 голосов
/ 03 ноября 2011

Возможно, вам понадобится это: ActionController :: TestUploadedFile вместо фактического файла ActionDispatch

См. Этот другой вопрос S / O для примера использования: Как проверить загрузку файла в рельсах?

Хотя этот предлагает вам может использовать то, что у вас есть: проверить загрузку файла с помощью rspec - rails

Также учтите, что это может быть что-то нехорошее, если rspec не обрабатывает: register => {: file => blah} так же, как: register => {'file' => blah}

...