【问题标题】: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

“{}”

【问题讨论】:

    标签: ruby-on-rails json rspec jbuilder


    【解决方案1】:

    对于遇到相同问题的任何人。我想通了。

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

    【讨论】:

    • 您必须调用render_views,因为在运行控制器时,视图渲染默认是禁用的。这加快了测试的运行,因为您应该只在控制器测试中测试控制器行为。
    • 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(我评论是因为编辑队列已满)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多