1

カスタムルートを介して呼び出されるコントローラーメソッドを単体テストするにはどうすればよいですか?

関連するルートは次のとおりです。

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

のスペックでは、そのルートが存在しないので、SessionsController私はただ使うことができません。get :create私も使用する場合は、get /auth/facebook/callback/それを教えてくれますNo route matches {:controller=>"sessions", :action=>"/auth/facebook/callback"}

また、スペックファイルにrequest.env ['something']を設定しても、ハッシュからいくつかのキーにアクセスし、別のパスにリダイレクトするcontroller.createため、使用できないようです。#createrequest

4

1 に答える 1

1

機能テストでは、各アクションの機能をテストする必要があります(一連のパラメーターが与えられた場合)

重要なのは、機能テストをルートから切り離しておくことです。(それ以外の場合は、とにかくルーティング抽象化のポイントは何ですか)

test :: unitでは、機能テストは次のようになります

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

このリクエストへのルートを一致させることができない場合、レールはチョークします。

これがうまくいかない場合は、2つのことを確認することをお勧めします

  1. 「get」は正しいhttp動詞です
  2. あなたのルートには他に必要なパラメータはありません(私は見ることができます:プロバイダーは1つです)

ルーティングで何かおかしなことをしている場合は、通常、別のテストを追加します。

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

これがアクションテストと一致する限り、すべてがうまくいくはずです。

于 2011-06-13T19:57:21.607 に答える