J'ai ça dans mon test
Project.should_receive(:find).with(@project).and_return(@project)
mais quand l'objet reçoit cet appel de méthode deux fois, je dois faire
Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)
Y a-t-il un moyen de dire quelque chose comme
Project.should_receive(:find).with(@project).and_return(@project).times(2)
ruby-on-rails
rspec
Jakub Arnold
la source
la source
any_instance
?La nouvelle
expect
syntaxe de rspec ressemblera à ceci:pour 2 fois:
pour exactement n fois:
pendant au moins n fois:
la source
have_received
syntaxe fonctionne également.expect(Project).to have_received(:find).exactly(n).times
etc.A souligné @JaredBeck. La solution n'a pas fonctionné pour moi sur
any_instance
appel.Dans tous les cas, j'ai fini par utiliser stub au lieu de should_receive.
Cela fonctionnera pour tout non. des fois cependant.
la source
should_receive
, par opposition àany_instance
, s'attend à ce que la classe reçoive le message le nombre de fois spécifié.any_instance
d'autre part, est généralement utilisé pour le stubbing d'une méthode.Ainsi, le premier cas est une attente que nous aimerions tester, tandis que le second passe d'une méthode à la ligne suivante afin que nous puissions passer à autre chose.
la source