代码之家  ›  专栏  ›  技术社区  ›  Jack Kinsella

如何在RSPEC控制器测试中截取局部变量

  •  1
  • Jack Kinsella  · 技术社区  · 14 年前

    我刚刚实现了Omniauth(使用Ryan Bates的屏幕广播 http://asciicasts.com/episodes/235-omniauth-part-1 )并且我正在为功能编写rspec测试,并且在测试身份验证创建操作时遇到了问题。关于如何测试这个变量,特别是如何截取局部变量omniauth,我感到非常困惑。不管我怎么努力,我都不能让任何测试发挥作用。

    例如,对于该操作的精简版本,如何测试是否对用户调用了新的

    
    #cut down version of the authentifications controller code I am attempting to test
    
      def create
        omniauth = request.env["omniauth.auth"]
        authentification = Authentification.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])     
        ....
        user = User.new
        ....
      end  
    
    #example test
    
        it "should create a new user" do          
            subject.stub_chain(:request,:env) {{"omniauth.auth" => {'provider' =>1, 'uid' => 2}}}
            User.should_receive(:new)
            post :create
          end
    

    1 回复  |  直到 14 年前
        1
  •  3
  •   Arkan    14 年前

    我做到了:

    class SessionsController < ApplicationController 
      def create 
        @user = User.find_by_auth_hash(auth_hash) 
      end 
    
      def auth_hash 
        request.env['omniauth.auth'] 
      end 
    end 
    
    describe SessionsController do 
      it 'should allow login' do 
        controller.stub!(:auth_hash).and_return({'provider' => 'twitter', 'uid' => '1234'}) 
        get :create, :provider => 'twitter' 
        assigns(:user).should_not be_nil 
      end 
    end 
    

    希望有帮助。