我正在以类似于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
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
您的Jbuilder输出是 response.body
。你需要将它与之比较的是你所嘲笑的。
expect(response.body).to include(photo.url)
通常情况下,检查视图输出最好通过Capybara在请求规范中进行测试,或者即使Rspec允许您在控制器规范中指定render_views
,也可以测试。