为啥在测试 RSPEC 时 JBuilder 不返回 JSON 中的响应正文
Posted
技术标签:
【中文标题】为啥在测试 RSPEC 时 JBuilder 不返回 JSON 中的响应正文【英文标题】:Why is JBuilder not returning a response body in JSON when testing RSPEC为什么在测试 RSPEC 时 JBuilder 不返回 JSON 中的响应正文 【发布时间】:2012-04-15 11:52:07 【问题描述】:在使用 DHH 的 JBuilder 测试来自 RSPEC 控制器测试的 JSON 响应时,我的 response.body 始终为“”。它在开发/生产模式下运行良好,当我使用 to_json 方法而不是 jbuilder 时,我的 response.body 中得到了正确的 JSON。
有人知道为什么我的 response.body 在测试时总是“”吗?
-----调试器
它“应该通过 JSON 返回购物车项目”,:focus 做
获取 :index, :format => :json 结束
(rdb:1) response.body
“”
【问题讨论】:
【参考方案1】:对于遇到相同问题的任何人。我想通了。
您必须在您正在进行的控制器测试中调用render_views
。如果你这样做了,你应该会看到一个 response.body
包含你的 JSON :)
【讨论】:
您必须调用render_views
,因为在运行控制器时,视图渲染默认是禁用的。这加快了测试的运行,因为您应该只在控制器测试中测试控制器行为。
如何使用render_views
,参考:relishapp.com/rspec/rspec-rails/v/3-5/docs/controller-specs/…
github.com/rspec/rspec-rails > 注意:为了鼓励更独立的测试,控制器规范中默认不呈现视图。如果您正在验证离散视图逻辑,请使用视图规范。如果您正在验证控制器和视图的行为,请考虑请求规范。如果您必须在控制器规范中验证呈现的视图内容,则可以使用 render_views
,但不建议这样做。【参考方案2】:
您可以从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渲染器显示
【讨论】:
你不能再把它放在spec_helper.rb
中了。现在你必须在rails_helper.rb
上执行此操作,更多信息:github.com/rspec/rspec-rails/issues/1918(我评论是因为编辑队列已满)以上是关于为啥在测试 RSPEC 时 JBuilder 不返回 JSON 中的响应正文的主要内容,如果未能解决你的问题,请参考以下文章
在 RSpec 中测试 Rails 视图:为啥当我想测试“索引”时它会路由到“显示”?
为啥我的 RSpec 没有加载 Devise::Test::ControllerHelpers?