2016-03-22 12 views
0

私は私のルートで以下の定義があります。Railsテストケースであいまいなリクエストを送信するにはどうすればよいですか?

resources :demands { resources: :solutions } 
resources :technologies { resources: :solutions } 

と私のコントローラのテストでは、私は2つの要求送信したい:

Get /demands/d123/solutions?technology_id=t123 
Get /technologies/t123/solutions?demand_id=d123 

をしかし、彼らの両方が(SolutionsControllerTestで)同じ呼び出すと一致します:

get :index, demand_id: d123, technology_id: t123 

あるroutes.rbを最初の定義を、一致します
resources :demands { resources: :solutions } 

どのようにして別個の方法で両方のリクエストを送信する必要がありますか?

+0

2番目の要求は、独自のコントローラの仕様でテストすべきではありません:それはルーティングコンポーネントを通過するように

は、その代わりに、統合テストを使用して、実際にHTTPリクエストを送信したいのでしょうか? –

答えて

0

Functional(Controller)テストでは、要求ステージ全体が偽装されています。 railsサーバを呼び出して実際の要求を送信する代わりに、ActionController::TestCaseはRequestオブジェクトを作成し、それをコントローラインスタンスに渡します。これにより、サーバーとテストが別々のプロセスで実行されるため、統合テストでは不可能な方法を突き止めることができます。

require 'test_helper' 

class AmbiguousRoutesTest < ActionDispatch::IntegrationTest 
    test "is /demands/d123/solutions?technology_id=t123 ambigous?" do 
    get "/demands/d123/solutions?technology_id=t123" 
    # @todo write assertions about the response 
    end 
end 
+0

あなたは完璧に私の混乱を解決しました、ありがとう! – Run

関連する問題