web-dev-qa-db-fra.com

RSpec: méthode privée de stub

J'essaie de tester une classe avec RSpec2, qui a des méthodes privées, qui sont appelées à partir de certaines méthodes publiques. Je teste les méthodes publiques avec

@foo.should_receive(:start_training).exactly(2).times

s'ils sont appelés et à quelle fréquence. Mon problème est que cette approche ne fonctionne pas avec des méthodes privées. Alors, existe-t-il un moyen d'utiliser sth comme @foo.send(:private_method) en combinaison avec should_receive? Ou toute autre syntaxe?

26
23tux

should_receive (: method) fonctionne que: la méthode soit publique ou privée ...

23
Justin Aiken

Vous pouvez utiliser la méthode allow_any_instance_of Pour bloquer ou simuler n'importe quelle instance d'une classe, par exemple vous avez un class nommé Foo avec quelques méthodes private que vous pouvez faire quelque chose comme ça

allow_any_instance_of(Foo).to receive(:private_method) do
  #do something
end 

Si vous avez également module, vous pouvez faire quelque chose comme ça

allow_any_instance_of(Module::Foo).to receive(:private_method) do
  #do something
end

Vous pouvez trouver plus de détails sur la méthode allow_any_instance_of() sur Documentation officielle

11
Sinscary

Pourquoi voulez-vous tester les méthodes privées? Ils sont privés pour une raison; pour empêcher l'accès aux appels externes. Tester les méthodes publiques qui reposent sur les méthodes privées devrait être suffisant.

2
Richard Brown