我在config / routes.rb文件中添加了以下内容:
match 'login' => 'sessions#new'
match 'logout' => 'sessions#destroy'
match 'auth/:provider/callback' => 'sessions#create'
match 'auth/failure' => 'sessions#new'
match 'sessions/delegate' => 'sessions#delegate'
这允许我拥有自己的自定义登录表单,在这种情况下通过OmniAuth和OpenID提供程序进行身份验证。路由和代码运行良好,但我在为SessionsController编写功能测试时遇到问题。
测试新动作效果很好:
test "show login form when requesting new session" do
get :new
assert_response :success
end
但是测试create动作会给我一个异常:ActionController :: RoutingError:没有路由匹配{:controller =>“sessions”,:action =>“create”}
代码是这样的:
test "create session adds logged in user" do
request.env['rack.auth'] = {:uid => auths(:one).open_id, :provider => 'open_id'}
post :create
# assert that create action did it's things here
end
我试图用get替换帖子,但结果是一样的。 为什么找到一个动作,而不是另一个?
答案 0 :(得分:0)
大概是因为你没有从匹配模式提供:provider key而感到困惑。您可能会发现为这些非资源路由指定名称更加清晰,例如:
match 'auth/:provider/callback' => 'sessions#create', as: 'callback'
这样您就可以在考试中post callback_path(provider: whatever)
,我认为: - )