为啥在测试 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?

为啥 Rails 找不到我的 jbuilder 模板或不渲染它?

为啥 Rspec 找不到 select2 方法?

Rails:在 RSpec 测试查看编辑表单时出错

如何在 rspec 中运行单个测试?