Как проверить метод send_data в Rails?
Как проверить метод send_data
в Rails?
Ответы
Ответ 1
Когда я прочитал его вопрос, я понял, что он должен убедиться, что send_data отправил строку/все, что он просил. Не так много, чтобы проверить его отправку, но чтобы убедиться в его спокойствии, что метод, который он отправил, не был пустым. насмехаясь, как вы это делали, на самом деле не дает ему такого результата.
Возможно, вы можете убедиться, что ваша строка не пуста или что-то в этом роде. Таким образом, вы не проверяете send_data, но то, что получает send_data, - это то, как вы хотите, чтобы он выглядел.
В моем случае (что привело меня к этому вопросу) было бы
#just use this to make sure it looks like you want it to while you are writing your
#tests. I remove it after. make sure it an instance variable @csv_string in my case.
puts assigns(:csv_string)
refute_nil assigns(:csv_string) #does the actual work. delete the puts line when done.
Некоторые любители используют рубиновый отладчик и sh! t... ваш пробег будет отличаться.
Ответ 2
Прежде всего посмотрите на источник метода send_data
http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_data
В соответствии с этим send_data
просто поместите все в render :text => '...'
с дополнительными параметрами.
Я думаю, вы можете сделать это следующим образом:
response.body.should eql data
response.header['Content-Type'].should eql 'image/png'
Ответ 3
Вам не нужно тестировать поведение самого send_data
, главным образом потому, что оно покрывается собственными тестами Rails. Кроме того, это заставит ваши тесты работать медленно (в конечном итоге). То, что вы должны сделать (с моей точки зрения), - это заглушить метод send_data, например:
controller.expects(:send_data).with("foo").returns(:success)
Надеюсь, что это поможет.
Ответ 4
Вы можете проверить это косвенно, проверив значение заголовка Content-Transfer-Encoding
.
expect(controller.headers["Content-Transfer-Encoding"]).to eq("binary")
или
controller.headers["Content-Transfer-Encoding"].should eq("binary")