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