2012-04-01 56 views
27

当使用DHH的JBuilder测试来自RSPEC控制器测试的JSON响应时,我的response.body始终为“{}”。它在开发/生产模式下工作正常,当我使用to_json方法而不是jbuilder时,我在response.body中获得正确的JSON。为什么JBuilder在测试RSPEC时不返回JSON响应体?

任何人都有线索,为什么我的response.body在测试时总是“{}”?

-----调试

它 “应该返回通过JSON车项目”:重点做

得到:指数:格式=>:JSON

( RDB:1)response.body

“{}”

回答

55

对于被有同样的问题的任何人。我已经知道了。

您必须在您正在进行的控制器测试中调用render_views。如果你这样做,你应该再看看你的JSON一个response.body包含:)

+0

您必须调用'render_views',因为在运行控制器时,默认禁用视图渲染。这加快了测试的运行速度,因为您应该只在控制器测试中测试控制器行为。 – 2014-07-24 22:50:22

+2

如何使用'render_views',ref:https://www.relishapp.com/rspec/rspec-rails/v/3-5/docs/controller-specs/render-views – 2016-09-08 07:34:54

+0

https://github.com/注意:为了鼓励更多的隔离测试,默认情况下,控制器规格中不会呈现视图。如果您正在验证离散视图逻辑,请使用视图规范。如果您正在验证控制器的行为并一起查看,请考虑请求规范。如果您必须验证控制器规范中呈现的视图内容,则可以使用'render_views',但不建议这样做。 – 2016-09-09 08:49:18

25

你可以找到https://github.com/rails/jbuilder/issues/32

所以在rspec的/ spec_helper.rb

RSpec.configure do |config| 
    # https://github.com/rails/jbuilder/issues/32 
    config.render_views = true 
end 

的解决方案上面的选项是后JSON结果将通过jbuilder渲染器显示