Ruby on rails 如何使用Minitest测试OmniAuth的SessionController
我正试图用Minitest测试我的facebook登录代码,但进展不顺利 当我在测试中尝试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
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[…]