【问题标题】:Rails Controller Rspec TestRails 控制器 Rspec 测试
【发布时间】: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


【解决方案1】:

您的规格有误。它会检查 @invitations 是否设置为邀请数组(这可能适用于 index 操作),但您的 show 操作会将单个邀请分配给 @invitation

【讨论】:

  • 很好地发现了这一点,答案总是比看起来简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多