从rspec api规范渲染jbuilder json

时间:2013-01-21 20:16:30

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

我正在以类似于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配置中包含了ApiHelper模块:api specs,其中包括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

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

1 个答案:

答案 0 :(得分:1)

您的Jbuilder输出 response.body。你需要将它与之比较的是你所嘲笑的。

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

通常情况下,检查视图输出最好通过Capybara在请求规范中进行测试,或者即使Rspec允许您在控制器规范中指定render_views,也可以测试。