2015-06-21 2 views
0

Я работаю над проектом в Ruby on Rails, и я решил использовать Jbuilder для обработки сериализации json для моих моделей. Однако при использовании Rspec для тестирования моих контроллеров с спецификациями запросов, используя *.json.jbuilder, мой request.body возвращается как объект StringIO, а не String.Rails Request Rspec Jbuilder, request.body - объект StringIO

Мой метод в пораженном контроллер выглядит следующим образом:

def list 
    @groups = ... 
end 

И файл list.json.jbuilder выглядит следующим образом:

json.array! @groups, :id, :name 

Тест фрагмент кода выглядит следующим образом:

get '/api/v1/groups', { :format => :json } 
puts request.body.class.name # gives StringIO instead of String... 

Я с использованием Rails 4.2.2, Ruby 2.2.2, Rspec-Rails 3.3.2 и JBuilder 2.3.0

я поставил в моем rails_helper.rb:

config.render_views # tried with config.render_views = true too 

StackTrace за исключением является:

Failure/Error: expect(json['groups'].length).to eq (2) 
TypeError: 
    no implicit conversion of StringIO into String 

Я могу добавить, что работает, когда не используется RSpec.

Благодаря

+0

Не устанавливайте 'config.render_views' в свой rails_helper.rb, так как это замедлит все ваши спецификации контроллера. Делайте это по отдельности или в контекстном блоке. – max

ответ

1

Если вы хотите проверить выход контроллера вам необходимо использовать response.body не request.body. request.body - это то, что отправляется клиентом при отправке формы.

+0

Я понятия не имею, почему Rack :: Test (какой контроллер контроллера RSpec построен поверх) использует объект StringIO для 'request.body', но это другой вопрос. – max

+1

2 часа в Интернете, и это была ошибка -.-, это то, что происходит, когда вы слишком долго кодируете, не делая перерывов ... –

Смежные вопросы