私が取り組んでいるコントローラのテストがあります。基本的に、コントローラーは次のようになります。
before_filter :set_up_foo
def set_up_foo
...
@foo = SomeObject.create(params[:some_object_attributes])
...
end
def some_action
# reference @foo
if @foo.nil?
...
else
# this is what I want to test
...
end
end
before フィルターではなく、else ブロックの内部をテストしたくありません。私の場合、実際に before フィルターを実行するためにモックしなければならないモデル オブジェクトが大量にあります。そのための別のテストがあります。before フィルターの「副作用」が実行されることを確認したい...この場合、 @foo はそのモックバージョンに初期化されます。
基本的に私はやりたい:
controller.foo = mock_foo_object
しかし、これは機能しません。私も試しました:
controller.stub!(:foo).and_return(mock_foo_object)
私は(笑)これがうまくいくと思っていましたが、うまくいきませんでした。私が得た唯一の実際のフィードバックは、@foo オブジェクトが設定されておらず、その結果、else 条件ではなく if 条件が得られたということです。
どんな助けでも大歓迎です...