2011-07-12 11 views
8

サイドバーの動作を決定するコントローラーについては、いくつかのURLを呼び出す必要があります。サイドバーは表示されるページに基づいて変更されます(a.o)。rspecテストで文字列として提供されたURLまたはパスを取得する

describe SidebarController do 
    before(:each) do 
    @sidebar = SidebarController.new 
    end 
    it 'should return :jobseekers for root_path' do 
    get(root_url) 
    @sidebar.section(root_path).should eq :jobseekers 
    end 
end 

これは、しかし、ActionController::RoutingError: No route matches {:controller=>"sidebar", :action=>"http://test.host/"}

で失敗することができます私のget文字列としてURLまたはパス? request.のデータを設定するよりスマートな方法がありますか?

答えて

15

文字列としてURLまたはパスを取得できますか?

コントローラテストではありません。テストコントローラーは実際にURLを処理していないので、5つのサポート要求タイプ(get、post、put、head、delete)の1つを使用してテストをセットアップしてから、適切なコントローラーアクションを呼び出します。 Guide to Testing Rails Applicationsを参照してください。

あなたが探しているのは統合テストか、RSpecの用語では "request spec"です。

7

ここでは...必ずしもあなたがこれをやってみたかった場合には...最善の方法な回避策ですが、...これは、レール3.2上で動作する方法...

module ActionController::TestCase::Behavior 
    #just parse the url and then call the regular get method 
    def get_path(path) 
    parsed_params = Rails.application.routes.recognize_path path 
    controller = parsed_params.delete(:controller) 
    action = parsed_params.delete(:action) 
    get(action, parsed_params) 
    end 
end 
関連する問題