2015-06-21 46 views
0

我正在Ruby on Rails項目中工作,並決定使用Jbuilder處理我的模型的json序列化。但是,當使用Rspec以請求規格測試我的控制器時,使用*.json.jbuilder視圖,我的request.body將作爲StringIO對象返回,而不是StringRails請求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 

爲異常的堆棧跟蹤是:

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

我可以補充一點,它不使用Rspec的時候工作

感謝

+0

不要在您的rails_helper.rb中設置'config.render_views',因爲它會減慢您的所有控制器規格。而是按照規範或上下文塊進行。 – max

回答

1

如果你想測試你的控制器的輸出,你需要使用response.bodyrequest.bodyrequest.body是客戶在提交表單時發送的內容。

+0

我不知道爲什麼Rack :: Test(RSpec控制器測試構建在其上)爲'request.body'使用StringIO對象,但這是另一個問題。 – max

+1

2小時的谷歌搜索,這是錯誤-.-,這是當你編碼太久而不休息時會發生什麼...... –