【问题标题】:Rendering jbuilder json from rspec api spec从 rspec api 规范渲染 jbuilder json
【发布时间】:2013-01-04 23:18:06
【问题描述】:

我正在以与Rails 3 in Action 第 13 章中描述的方式类似的方式为 Rails api 编写规范。

在书中,他们使用 #to_json 的结果比较 json 响应。

expect(response.body).to eql(project.to_json)

但是,我正在使用 jbuilder,所以这不起作用。我需要一种方法来呈现 jbuilder 模板并获得示例中的响应,但到目前为止还没有成功。

我的测试位于 spec/api 目录中,并按照书中的指示标记为type: :api。我在 rspec 配置中包含用于 :api 规范的 ApiHelper 模块,其中包括 Rack::Test::Method,(但这实际上似乎并没有太大区别)。

似乎在其他 rspec 测试中使用的 #render 方法可以工作,但它在我的 api 规范中不可用,我不知道如何做到这一点。

完整的示例规范如下所示。

# spec/api/photos_spec.rb

require "spec_helper"

describe "Photos Api", type: :api do
  let(:user)  { create(:user) }
  let(:token) { user.authentication_token }
  let(:photo) { create(:photo) }

  let(:url) { "/api/photos" }
  it "should get a photo" do
    get "#{url}/#{photo.id}.json", token: token
    expect(response).to be_ok
    expect(response.body).to eql("???") # How can I get the jbuilder output for comparison?
  end
end

非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: ruby-on-rails api testing rspec jbuilder


    【解决方案1】:

    你的 Jbuilder 输出是response.body。您需要与它进行比较的是您嘲笑的内容。

    expect(response.body).to include(photo.url)
    

    通常,检查视图的输出最好通过 Capybara 或您拥有的请求规范中进行测试,即使 Rspec 允许您在控制器规范中指定 render_views。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 2013-10-06
      • 2012-11-24
      • 2014-02-18
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      相关资源
      最近更新 更多