いくつかの機能を備えたベースコントローラーがあります。そのベースコントローラーには外部からアクセスできず、それに一致するルートはありません。
次に、そのコントローラーを他のコントローラーで拡張して機能を追加し、ルートを使用して、そのベースコントローラーを拡張する3つのコントローラーを使用して、それぞれに3つのメソッドを定義します。
ベースコントローラーをテストしたいのですが、できません
post :index
そのアクションのルートがないため(ルート一致エラーなし)
これらのテストは大きく変更されるため、これら3つのコントローラーのいずれかに追加したくありません(コントローラーは... 3週間のキャンペーン中に使用され、その後削除されます)。
いくつかのコード...:
ベースコントローラー、CampaignController
class CampaignController < ApplicationController
def index
#some code...
end
def campaign_name
raise('campaign_name missing')
end
def campaign_url
raise('campaign_url missing')
end
#more actions....
end
アクセス可能なコントローラーの1つ、SchoolCampaignController
class SchoolCampaignController < CampaignController
def campaign_name
'school'
end
def campaign_url
school_url
end
end
これらのコントローラーは基本的にはそれですが、基本アクションの1つをオーバーライドする必要がある場合があります
だから、私は何が間違っているのですか?CampaignControllerを適切にテストするにはどうすればよいですか?
編集:エラーを発生させる2つのメソッドをテストしたくない、たとえばインデックスをテストしたい、または他のアクションのいくつかをテストしたい(図には示されていません)
「response=controller.index」を試してみましたが、beforeフィルターは呼び出されず、応答はhttp応答ではなく、そのコマンドの出力にすぎません(...responseのような期待はできません。それでrender_template(xxxx)する必要があります)
編集2:ルーティングエラーをバイパスするために、before(:all)ブロックでテスト内にルートを作成しましたが、ルーティングは問題ではありませんが、存在しないビューに関するエラーが発生します(アクセス可能な各コントローラーはすべてを実装します)ビューですが、抽象的なものにはありません)