【发布时间】:2016-02-01 18:02:55
【问题描述】:
首先,我对 Rails 和通用 MVC 格式非常陌生。
我正在使用 Rspec 进行所有测试,但我的 controller_spec 中的这段代码存在问题:
describe "GET show" do
context 'with an admin user signed in' do
with :admin
let!(:invitation) { create :invitation }
before do
sign_in admin
get :show, id: invitation.id
end
it { should respond_with :ok }
it { should respond_with_content_type :html }
it { should render_template :show }
it "assigns the requested invitation as @invitation" do
expect(assigns(:invitations)).to eq([invitation])
end
end
end
这是我得到的错误:
14) InvitationsController GET show with an admin user signed in assigns the requested invitation as @invitation
Failure/Error: expect(assigns(:invitations)).to eq([invitation])
expected: [#<Invitation id: 98, token: "blah", name: "Team", number_of_uses: 5, created_at: "2016-01-29 20:43:27", updated_at: "2016-01-29 20:43:27">]
got: nil
(compared using ==)
# ./spec/controllers/invitations_controller_spec.rb:53:in `block (4 levels) in <top (required)>'
最后,这里分别是我的控制器和策略类 sn-ps。
控制器:
class InvitationsController < ApplicationController
before_action :set_invitation, only: [:show, :edit, :update, :destroy]
respond_to :html
def index
authorize Invitation
@invitations = policy_scope(Invitation)
respond_with(@invitations)
end
def show
authorize @invitation
respond_with(@invitation)
end
invitation_policy.rb:
class InvitationPolicy < ApplicationPolicy
Scope = Struct.new(:user, :scope) do
def resolve
Invitation.all
end
end
def index?
user.admin?
end
def show?
user.admin?
end
我在这里使用的相关 gem 是 Pundit 和 FactoryGirl。我仍然在学习很多这些东西的含义,所以我很清楚答案可能是显而易见的。
【问题讨论】:
-
你的
sign_in admin在做什么?你在存根sign_in吗?
标签: ruby-on-rails ruby rspec