Можно ли заглушить всю цепочку с помощью мокко?Например, я хочу получить заглушку:
User.first.posts.find(params[:id])
, чтобы вместо доступа к базе данных она возвращала предопределенный пост-экземпляр.В идеале, я бы хотел сделать что-то вроде:
@post = Post.new
User.any_instance.stubs(:posts,:find).returns(@post)
Как вы можете видеть, я убираю методы 'posts' и 'find' вместе.Очевидно, что сейчас это не работает, но есть ли способ добиться этого эффекта?Благодарю.
РЕДАКТИРОВАТЬ: Я нашел следующее онлайн, который взламывает способ сделать это:
module Mocha
module ObjectMethods
def stub_path(path)
path = path.split('.') if path.is_a? String
raise "Invalid Argument" if path.empty?
part = path.shift
mock = Mocha::Mockery.instance.named_mock(part)
exp = self.stubs(part)
if path.length > 0
exp.returns(mock)
return mock.stub_path(path)
else
return exp
end
end
end
end
С этим, вы можете вызвать User.any_instance.stub_path ('posts.find '). возвращает (@post)