rspec控制器测试实例变量调用方法

rspec控制器测试实例变量调用方法,rspec,controller,activeadmin,instance-variables,Rspec,Controller,Activeadmin,Instance Variables,我正在尝试为继承的ActiveAdmin控制器编写测试,但在检查实例变量是否正在调用方法时遇到问题。我想要的行为是调用该方法的副作用,因此我希望确保调用该方法 这是控制器: ActiveAdmin.register User do controller do before_filter :get_user def get_user @user = User.find_by_login(params[:id]) if !@user fl

我正在尝试为继承的ActiveAdmin控制器编写测试,但在检查实例变量是否正在调用方法时遇到问题。我想要的行为是调用该方法的副作用,因此我希望确保调用该方法

这是控制器:

ActiveAdmin.register User do
  controller do
    before_filter :get_user

    def get_user
      @user = User.find_by_login(params[:id])
      if !@user
        flash[:notice] = "No user found with that login"
        return false
      end
    end

  end
  member_action :tos_ban, :method => :post do
    @user.ban!(current_user, "admin ban", 1)
    flash[:notice] = "#{@user.display_name} successfully TOS Banned"
    redirect_back
  end
end
还有,我的规格:

require 'spec_helper'

describe ActiveAdmin::UsersController do
  render_views
  let(:user) { FactoryGirl.create(:user, :admin => admin) }
  let(:administrator) { FactoryGirl.create(:administrator) }
  let(:banned_user) { FactoryGirl.create(:user) }

  before(:each) do
    login_as(user)
    session[:last_admin_action_time] = Time.now
    session[:current_admin_id] = administrator.id
 end

  describe 'banning users' do
    context 'as an administrator' do
      let(:admin) { true }

      before(:each) do
        User.should_receive(:ban!).once           # I want something like this
                                                  # on @user in the controller
        post :tos_ban, :id => banned_user.login
      end

      it 'bans the right user' do
        assigns(:user).should eq(banned_user)
      end
    end
  end
end
编辑:

所以,经过一点RTFMing——通过RSpec手册——我发现我需要使用mock:

it 'bans the user' do
  banned_user = mock_model(User)
  User.stub(:find_by_login).and_return(banned_user)
  banned_user.should_receive(:ban!)
  banned_user.should_receive(:display_name)
  post :tos_ban, :id => banned_user.login
end

被禁止的用户。是否应该接收(:ban!)

在控制器中,将记录的引用(用户实例)分配给实例变量。您希望引用该实例(而不是用户对象或变量)来进行断言