Est-il possible de tronquer une chaîne entière en utilisant Mocha? Par exemple, je veux stub:RoR: tronçon enchaîné à l'aide de Mocha
User.first.posts.find(params[:id])
telle qu'elle renvoie une instance de poste prédéfini au lieu d'accéder à la base de données. Idéalement, je veux faire quelque chose comme:
@post = Post.new
User.any_instance.stubs(:posts,:find).returns(@post)
Comme vous pouvez le voir, je suis stubbing à la fois les « postes » et « trouver » des méthodes ensemble. De toute évidence, cela ne fonctionne pas pour le moment, mais y a-t-il un moyen de parvenir à cet effet? Merci.
EDIT: J'ai trouvé la ligne suivante qui hacks une façon de le faire:
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
Avec cela, vous pouvez appeler User.any_instance.stub_path ('posts.find') renvoie (. @post)
J'ai trouvé quelque chose sur StackOverflow qui ne sorta ce que nous voulons faire. Vérifiez la section d'édition de ma question. – pushmatrix