Хорошо, теперь я понимаю. Вы хотите отключить звонок на внешний сервис. Интересно, что мокко не работает с таким способом. Помимо того, что было упомянуто выше, похоже, что методы-заглушки определены в синглтон-классе, а не в модуле, поэтому не путайтесь.
Почему бы не что-то подобное?
test "bar" do
Decorator = Module.new{ def foo; 'foo'; end }
get :bar
end
Если вы не хотите получать предупреждения о том, что Decorator уже определен (что является признаком того, что в любом случае происходит некоторая связь), вы можете добавить его:
class ModelsController < ApplicationController
class << self
attr_writer :decorator_class
def decorator_class; @decorator_class ||= Decorator; end
end
def bar
@model = Model.find(params[:id])
@model.extend(self.class.decorator_class)
@model.foo
end
end
, что делает тест как:
test "bar" do
dummy = Module.new{ def foo; 'foo'; end }
ModelsController.decorator_class = dummy
get :bar
end
Конечно, если у вас более сложная ситуация с несколькими декораторами или декораторами, определяющими несколько методов, это может не сработать для вас.
Но я думаю, что это лучше, чем заглушить находку. Как правило, вы не хотите заглушать свои модели в интеграционном тесте.