Я использую RR для имитации и заглушки в RSpec, и я столкнулся с ситуацией, когда я хотел бы заглушить метод из суперкласса контроллера, который устанавливает некоторые переменные экземпляра. Я могу решить, как заглушить вызов метода, и если я отлаживаю, я вижу, что мой заглушенный блок вызывается, но я не могу заставить переменные экземпляра в блоке распространяться в тестируемый класс.
Лишь бы разобрать:
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 на то, что я хочу. Я просто не могу понять, как это сделать.
Я пробовал заглушку instance_of RR и просто заглушал определение контроллера:
stub.instance_of(A).bogglensap { @instancevar = "known value" }
stub(controller).bogglesnap { @instancevar = "known value" }
но ни один из них, похоже, не работает, ну, они не работают :)
Есть ли у кого-нибудь какие-либо указания о том, как вы должны заглушить вызов этого метода и установить переменные экземпляра? Я предполагаю, что это связано с контекстом, в котором запускается блок, но я надеюсь, что кто-то уже сталкивался с чем-то подобным.
Спасибо