简体   繁体   English

Rails控制器Rspec测试

[英]Rails Controller Rspec Test

To preface, I'm extremely new to Rails and general MVC format. 作为前言,我是Rails和一般MVC格式的新手。

I'm using Rspec to do all my testing and I'm having an issue with this piece of code in my controller_spec: 我正在使用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

Here is the error I'm getting: 这是我得到的错误:

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)>'

Finally, here are my controller and policy class snippets, respectively. 最后,这里分别是我的控制器和策略类片段。

Controller: 控制器:

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: 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

The relevant gems I'm using here are Pundit and FactoryGirl. 我在这里使用的相关宝石是Pundit和FactoryGirl。 I'm still learning a lot of what these things mean, so I'm well aware that the answer may be obvious. 我还在学习很多这些东西的含义,所以我很清楚答案可能很明显。

Your spec is wrong. 你的规格是错的。 It checks that @invitations is set to an array of invitations (which is probably appropriate for the index action) but your show action assigns a single invitation to @invitation . 它检查@invitations是否设置为一组邀请(这可能适合于索引操作),但您的show动作会为@invitation分配一个邀请。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM