2016-05-26 8 views
0

Rails 4.1.8
Rspec 3.4.4RSpecコントローラ仕様で2つの同様のルートのうちのもう1つを呼び出す方法は?

2つの経路を指定すると、どのように呼び出すのかが分かりません。

私はこのコードで私のテストは、ルートAを参照していると信じているルートA)/data_services/add_comment/:id
ルートB)services_controller_spec.rb

describe 'create comment' do 
    let!(:service) { FactoryGirl.create(:service) } 

    describe 'with valid comment' do 
    it 'creates a new comment' do 
     expect { 
     post :add_comment, id: service.id 
     }.to change(service.service_comments, :count).by(1) 

     expect(response).to redirect_to(service_path(service)) 
    end 
    end 
end 

/data_services/:id/add_comment

)。私はルートb)をどのように参照しますか?

+0

あなたの仕様に 'describe ServicesController'ブロックを表示し、' routes.rb'から関連するルートを含めるとよいでしょう。 2番目のルートが何かにルートするかどうかはわかりません。 2番目のルートを 'ServicesController#add_comment'のものにするという目標はありますか? –

答えて

1

rspec-railsコントローラ仕様でアクションを呼び出すと、ルートを呼び出していないので、コントローラとアクションを直接呼び出すことになります。 describeブロックにはコントローラ名を渡してrspec-railsにクラス名を渡し、postまたはgetコールに渡すアクション名にはメソッド名がrspec-railsに通知されます。コントローラクラスをインスタンス化してメソッドを直接呼び出します。

しかし、アクションメソッドが呼び出されると、Railsはそのコントローラとアクションへのルートをルックアップし、いくつかの理由(例えば、request.env['PATH_INFO']にURIを構築するなど)でそれを使用します。使用されているルートは、ルートファイルの内容によって異なります。

したがって、コントローラ仕様で特定のルートを実行するには、ルートがルーティングされるコントローラとアクションを呼び出します。

rspec-railsにはrouting specsもあります。これはルートのルーティング先を直接テストするためのものです。

関連する問題