before_filter でリダイレクトが発生することなく、コントローラー アクションが実際に呼び出されるかどうかをテストしたいと思います。コントローラー アクション自体がリダイレクトを実行する可能性があるため、アクションをスタブして特定のエラー (SuccessfulActionError など) を発生させ、メソッドが呼び出されたことを示すインジケーターとしてそのエラーをチェックします。
だから私は以下を追加しました:
controller.stub!(:action).and_raise(SuccessfulActionError)
何らかの形で機能し、例外が発生していますが、メソッド内の実際のコードは引き続き実行されます (たとえば、存在しないレコードの ID を「表示」アクションに送信すると、ActiveRecord::RecordNotFound 例外がスローされます) )。
何故ですか?として実装されているかのように、アクションを完全にスタブしたい
def action
raise SuccessfulActionError
end
私は何を間違っていますか?これは間違ったアプローチですか?
編集:
使用する
controller.should_receive(:action)
どちらも機能しません。
ApplicationController から取得されない default_url_options を修正するために、このように before_all フィルターで Controller を上書きします。
class MyController
def default_url_options(options = {})
{ :locale => params[:locale] }
end
end
それが犯人でしょうか?残念ながら、それを削除すると、仕様はまったく機能しません。