【发布时间】:2015-09-07 05:42:03
【问题描述】:
我正在使用 Ruby on Rails 开发一个项目,我决定使用 Jbuilder 来处理我的模型的 json 序列化。但是,当使用 Rspec 使用请求规范测试我的控制器时,使用 *.json.jbuilder 视图,我的 request.body 以 StringIO 对象的形式返回,而不是 String。
我在受影响控制器中的方法如下所示:
def list
@groups = ...
end
list.json.jbuilder 文件看起来像:
json.array! @groups, :id, :name
测试 sn-p 看起来像:
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 时工作。
谢谢
【问题讨论】:
-
不要在你的 rails_helper.rb 中设置
config.render_views,因为它会减慢你所有的控制器规格。而是在每个规范的基础上或在上下文块中执行它。
标签: ruby-on-rails ruby rspec