2011-01-21 52 views
1

我已經添加了以下在我的config/routes.rb中文件:測試非資源行動on Rails的

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 

但測試創建行動給了我一個例外:ActionController的:: RoutingError:沒有路由匹配{:控制器=> 「會話」,:動作=>」打造「}

的代碼是這樣的:

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 

我試圖替換爲得到這個職位,但結果是一樣的。 爲什麼找到一個動作,而不是其他動作?

回答

0

想必它會感到困惑,因爲您沒有提供匹配模式中的提供者密鑰。您可能會發現更加清晰,爲這些非足智多謀路線指定名稱,如:

match 'auth/:provider/callback' => 'sessions#create', as: 'callback' 

這將讓你post callback_path(provider: whatever)在您的測試,我覺得 :-)

+0

沒有,然後我得到` ActionController :: RoutingError:沒有路由匹配{:controller =>「sessions」,:action =>「/ auth/open_id/callback」}`但是這是一個很好的建議... – harald 2011-01-21 20:55:35