2010-12-16 8 views
6

rspecでgetリクエストを作成したいと思います。rspecで特定のURLを呼び出してください

get :exec, {:query=>"bla", 
     :id => "something", 
     :user_id => "user" 
    } 

このビルドのURLのように: /user/query/something/_XXX_/exec?query=bla

がどのように私はこのような何かを行うことができます。/user/query/something/exec?query=bla

の事私のコントローラは、それを取得要求をチェックし、URLは次のように見なければならないということですrspec? (XXXはroutes.rbファイルにハードコードされています)

+0

私はruby-on-railsタグを追加する自由を取った。それが間違っていた場合は削除します。 –

答えて

16

私はあなたがコントローラ仕様を指していると仮定しています。

例のようにハッシュを渡すと、ルート内の変数とキーが一致します。ルートと一致しないキーについては、キーと値のペアがクエリ文字列として追加されます。例えば

、あなたはあなたの仕様で、この持っているとします

get :exec, :query => 'foo', :id => '1', :user_id => 42 

をそして、あなたはあなたのルート(Railsの3スタイル)でこれを持っている:

match '/exec/:user_id/:id' => 'whatever#exec' 

スペックを、キーで代用します/値ペアを入力し、次のパスでリクエストをシミュレートしてください:

/exec/42/1?query=foo 

あなたのルートにある変数名を、スペック要求の中のparamsに適切にマッチングさせてください。

+0

私の質問の主な問題は、 "XXX"です - それはルートファイルにハードコードされています(私は名前付きルートが必要なのでこれをやっています)ので、langパラメータ、/ XXX/execのようなものはありませんか? query = blaと何か/ YYY/exec?query = blaはvaildのURLであり、rspecs get ...を使ってそれらのうちの1つ(ルートファイルの最初のもの)を作成できます。 – Stephan

+1

RSpecが可能になるかどうかわかりません特定の名前付きルートを別のルートよりも優先します。私はあなたのパラマウントに合った最初のルートを選ぶと信じています。私はこれが設計によるものだと考えています:RSpecはあなたが孤立して物事をテストすることを望みます。あなたのコントローラはあなたのルートから隔離されています。私はあなたが常にリクエストURLを返すメソッドをスタブすることによってそれをハックできると思います。 – rlkw1024

関連する問題