2011-06-13 83 views
0

如何單元測試通過自定義路由調用的控制器方法?單元測試通過自定義路由調用的控制器方法

相關的路線是:

/auth/:provider/callback(.:format) {:controller=>"sessions", :action=>"create"} 

在規格爲SessionsController我不能只用get :create,因爲這條路線不存在。如果我也使用get /auth/facebook/callback/它會告訴我No route matches {:controller=>"sessions", :action=>"/auth/facebook/callback"}

它也好像我不能只用controller.create因爲#createrequest散列訪問某些鍵,它也重定向到其他路徑,即使我設置request.env [「東西」]在規範文件。

回答

1

功能測試應該測試每個動作 (給定一組參數)

至關重要的功能,請妥善保管您從您的路線去耦功能測試。 (還有什麼是無論如何路由抽象的點)這樣

test "#{action_name} - does something" do 
    #{http_verb} :#{action_name}, :params => {:their => "values"} 
    assert_response :#{expected_response} 
end 

在測試::單位功能測試看起來是,我們不提任何地方的路由。

因此,對於一個真實的例子您創建

test "create - creates a session" do 
    get :create, :provider => "your provider" 
    assert_response :success 
end 

Rails會嗆,如果它不能匹配這個請求的路由。

如果這不起作用,我建議你檢查兩件事情

  1. 「得到」是正確的HTTP動詞
  2. 有在你的路線沒有其他必需的參數(我可以看到:供應商是一個)

如果我在做任何古怪的路由選擇, 我通常會添加一個單獨的測試。

test "create - routing" do 
    assert_recognizes({ 
    :controller => "sessions", 
    :action => "create", 
    :provider => "yourProvider" 
    }, "/auth/yourProvider/callback") 
end 

只要這與您的動作測試 匹配一切都應該是好的。

+0

'get:create,:provider =>'提供者名稱'訣竅。謝謝! – 2011-06-14 08:10:49

相關問題