2017-10-02 1 views
0

コントローラのアクションにマップするカスタムルートを自分のコントローラに設定しようとしていますが、ルートをテストするときにルートが一致しないというメッセージが表示されます。ルーティングアサーションがルートを認識しない

routes.rbを

MyEngine::Engine.routes.draw do 
    resources :lead_emails, except: [:new, :edit, :show] 
    get 'lead_emails/send_out_emails/:idea_id', to: 'lead_emails#send_out_emails', as: 'send_out_emails' 
end 

すくいルート

Routes for MyEngine::Engine: 
    lead_emails GET /lead_emails(.:format)       my_engine/lead_emails#index 
       POST /lead_emails(.:format)       my_engine/lead_emails#create 
    lead_email PATCH /lead_emails/:id(.:format)      my_engine/lead_emails#update 
       PUT /lead_emails/:id(.:format)      my_engine/lead_emails#update 
       DELETE /lead_emails/:id(.:format)      my_engine/lead_emails#destroy 
send_out_emails GET /lead_emails/send_out_emails/:idea_id(.:format) my_engine/lead_emails#send_out_emails 

は私が

test "should generate send out emails route" do 
     assert_generates('lead_emails/send_out_emails/1', 
     {controller: 'my_engine/lead_emails', action: 'send_out_emails', idea_id: "1"}) 
end 

ActionController::UrlGenerationError: 
No route matches {:action=>"send_out_emails", :controller=>"my_engine/lead_emails", :idea_id=>"1"} 


test "should recognize send out emails route should exist" do 
    assert_recognizes(
      {controller: 'my_engine/lead_emails', action: 'send_out_emails', idea_id: "1"}, 
      'lead_emails/send_out_emails/1') 
end 

No route matches "/lead_emails/send_out_emails/1" 

狂気の事があればということで、このルートにさまざまな方法をテストしようとしています私は助けを使うそれは動作します。

test "should send out emails" do 
    get send_out_emails_path(@idea.id) 
    assert_response :success 
end 

このテストに合格します。どうすればこのルートをテストできますか?かなりストレートなようだが、それは私を夢中にさせている!私はコントローラのmy_engine接頭辞を付けて試してみましたが、何の示唆も得られませんでした。

答えて

0

私は本当になぜこれが動作するのかわかりませんが、動作します。私のテストで設定方法に変数を追加しました

setup do 
    @routes = MyEngine::Engine.routes 
end 

すべてのテストが動作します。

関連する問題