2013-01-21 75 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