2013-01-21 49 views
1

我正在编写一个Rails api规范,其方法与第Rails 3 in Action第13章中描述的方式类似。从rspec api渲染jbuilder json规范

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

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

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

我的测试位于spec/api目录中,并按照书中的指示标记为type: :api。我将ApiHelper模块包含在:rspec配置中的api规范中,其中包括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

您的Jbuilder输出response.body。你需要比较的是你嘲笑的东西。

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

通常的看法检查输出最好要求的规格内通过水豚测试,或你有什么,即使Rspec的允许你指定你的控制器的规格内render_views