RSpecのモックとスタブにRRを使用していますが、いくつかのインスタンス変数を設定するコントローラーのスーパークラスからメソッドをスタブしたいという状況に遭遇しました。メソッド呼び出しをスタブする方法を理解できます。デバッグすると、スタブされたブロックが呼び出されていることがわかりますが、ブロック内のインスタンス変数を取得して、テストしているクラスに伝播させることはできません。
分解するだけです:
class A < ApplicationController
before_filter :bogglesnap
def bogglesnap
@instancevar = "totally boggled"
end
end
class B < A
def do_something_with_instance
if @instancevar
....
else
....
end
end
end
これが基本的な設定なので、コントローラーBのテストでは、bogglesnapメソッドをAからスタブして、@instancevarを必要なものに設定したいと思います。どうすればいいのかわからない。
RRのinstance_ofスタブを試し、コントローラー定義をスタブアウトしました。
stub.instance_of(A).bogglensap { @instancevar = "known value" }
stub(controller).bogglesnap { @instancevar = "known value" }
しかし、これらはどちらも機能していないようです、まあ、機能しません:)
そのメソッド呼び出しをスタブしてインスタンス変数を設定する方法について、誰かがポインターを持っていますか?私はそれがブロックが実行されているコンテキストに関係していると思いますが、誰かが以前にこのようなものに遭遇したことを望んでいます。
ありがとう