如何创建验证JSON响应的rspec测试?

AnA*_*ice 15 testing json rspec cancan ruby-on-rails-3

我有一个带有方法的组控制器 def inbox.

如果用户是组成员,则收件箱将返回JSON对象.

如果用户不是会员,则可以通过CanCan权限重定向收件箱.

如何编写rspec来测试这两个用例?

目前规格:

require 'spec_helper'

describe GroupsController do
  include Devise::TestHelpers

  before (:each) do
    @user1 = Factory.create(:user)
    @user1.confirm!
    sign_in @user1
    @group = Factory(:group)
    @permission_user_1 = Factory.create(:permission, :user => @user1, :creator_id => @user1.id, :group => @group)
  end

  describe "GET inbox" do
    it "should be successful" do
      get inbox_group_path(@group.id), :format => :json
      response.should be_success
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

路线:

inbox_group GET /groups/:id/inbox(.:format) {:controller=>"groups", :action=>"inbox"}
Run Code Online (Sandbox Code Playgroud)

路线文件:

resources :groups do
  member do
    get 'vcard', 'inbox'
  end
  ....
end
Run Code Online (Sandbox Code Playgroud)

Rom*_*man 35

这就是我这样做的方式:

describe "GET index" do
  it "returns correct JSON" do
    # @groups.should have(2).items
    get :index, :format => :json
    response.should be_success
    body = JSON.parse(response.body)
    body.should include('group')
    groups = body['group']
    groups.should have(2).items
    groups.all? {|group| group.key?('customers_count')}.should be_true
    groups.any? {|group| group.key?('customer_ids')}.should be_false
  end
end
Run Code Online (Sandbox Code Playgroud)

我没有使用康康,所以我无法帮助解决这个问题.