Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用Minitest测试OmniAuth的SessionController_Ruby On Rails_Facebook_Omniauth_Minitest - Fatal编程技术网

Ruby on rails 如何使用Minitest测试OmniAuth的SessionController

Ruby on rails 如何使用Minitest测试OmniAuth的SessionController,ruby-on-rails,facebook,omniauth,minitest,Ruby On Rails,Facebook,Omniauth,Minitest,我正试图用Minitest测试我的facebook登录代码,但进展不顺利 当我在测试中尝试get:auth,'provider'=>'facebook'时,测试会为nil:NilClass返回未定义的方法“[]”,如果我尝试get:new它会通过,但不会调用auth 如何使用omniauth成功重定向到auth 这是我的源代码 测试/控制器/会话\u控制器\u test.rb require 'test_helper' class SessionsControllerTest < Act

我正试图用Minitest测试我的facebook登录代码,但进展不顺利

当我在测试中尝试
get:auth,'provider'=>'facebook'
时,测试会为nil:NilClass返回
未定义的方法“[]”,如果我尝试
get:new
它会通过,但不会调用auth

如何使用omniauth成功重定向到auth

这是我的源代码

测试/控制器/会话\u控制器\u test.rb

require 'test_helper'

class SessionsControllerTest < ActionController::TestCase

    test '#signup_success' do
        OmniAuth.config.test_mode = true
        OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new({
            'provider' => 'facebook',
            'uid' => '123451234512345',
            'info' => {'email' => 'testuser@testmail.com', 'name' => 'test', 'image' => ''}
        })
        request.env['omniauth.env'] = OmniAuth.config.mock_auth[:facebook]

        get :auth
    end
end
需要“测试助手”
类SessionControllerTest“facebook”,
'uid'=>'123451234512345',
'信息'=>{'电子邮件'=>'testuser@testmail.com“,”名称“=>”测试“,”图像“=>”}
})
request.env['omniauth.env']=omniauth.config.mock_auth[:facebook]
获取:auth
结束
结束
app/controllers/sessions\u controller.rb

class SessionsController < ApplicationController
    def auth
        if(env['omniauth.params']['type'] == 'signin')
            if User.find_by(uid: env['omniauth.auth'].uid)
                flash[:alert] = "Already registered"
                redirect_to :back
            else
                user = User.omniauth(env['omniauth.auth'])
                if user.save
                    session[:user_id] = user.uid
                    redirect_to root_url
                else
                    flash[:alert]="Failed to Signin"
                    redirect_to :back
                end
            end
        elsif(env['omniauth.params']['type'] == 'login')
            if User.find_by(uid: env['omniauth.auth'].uid)
                session[:user_id] = env['omniauth.auth'].uid
                redirect_to root_url
            else
                flash[:alert] = "Not registered"
                redirect_to :back
            end
        else
            redirect_to root_url
        end
    end

    def find
        redirect_to '/auth/facebook?type=login'
    end

    def new
        redirect_to '/auth/facebook?type=signin'
    end

    def destroy
        session[:user_id] = nil
        redirect_to root_url
    end
end
class sessioncontroller
我认为您可能只需要在
sessioncontroller\auth
中使用
request.env[…]
而不是
env[…]