Как проверить метод send_data в Rails? - PullRequest
15 голосов
/ 17 июня 2010

Как я могу протестировать метод send_data в Rails?

Ответы [ 4 ]

20 голосов
/ 03 июня 2013

Прежде всего посмотрите на источник метода 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'
9 голосов
/ 17 июня 2010

Вам не нужно проверять поведение самого send_data, главным образом потому, что это покрыто собственными тестами Rails.Кроме того, это заставит ваши тесты работать медленно (в конце концов).То, что вы должны сделать (с моей точки зрения), это заглушить метод send_data, например:

controller.expects(:send_data).with("foo").returns(:success)

Надеюсь, это поможет.

3 голосов
/ 01 декабря 2012

Вы можете проверить это косвенно, проверив значение заголовка Content-Transfer-Encoding.

expect(controller.headers["Content-Transfer-Encoding"]).to eq("binary")

или

controller.headers["Content-Transfer-Encoding"].should eq("binary")
2 голосов
/ 11 июля 2011

Когда я прочитал его вопрос, я понял, что он означает, что 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's 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.

Некоторые любители использовать отладчик ruby ​​и sh! T ... ваш пробег будет разным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...