J'ai ceci 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)
Est-il possible de dire quelque chose comme
Project.should_receive(:find).with(@project).and_return(@project).times(2)
pour 2 fois:
Project.should_receive(:find).twice.with(@project).and_return(@project)
pour exactement n fois:
Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)
pendant au moins n fois:
Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)
plus de détails sur https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts under Recevoir des comptes
J'espère que ça aide =)
La nouvelle syntaxe expect
de rspec ressemblera à ceci:
pour 2 fois:
expect(Project).to receive(:find).twice.with(@project).and_return(@project)
pour exactement n fois:
expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)
pendant au moins n fois:
expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)
should_receive
, par opposition à any_instance
, attend que la classe reçoive le message le nombre de fois spécifié.
any_instance
d'autre part est généralement utilisé pour écraser une méthode.
Donc, le premier cas est une attente que nous aimerions tester, tandis que le second passe une méthode à la ligne suivante pour que nous puissions continuer.
@JaredBeck l'a souligné. La solution n'a pas fonctionné pour moi sur any_instance
appel.
Pour toute instance, j'ai fini par utiliser stub au lieu de should_receive.
Project.any_instance.stub(:some_method).and_return("value")
Cela fonctionnera pour tout non. des fois cependant.