web-dev-qa-db-ja.com

RSpec:スタブプライベートメソッド

いくつかのパブリックメソッドから呼び出されるいくつかのプライベートメソッドを持つRSpec2でクラスをテストしようとしています。私はパブリックメソッドをテストします

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

それらが呼び出された場合、その頻度。私の問題は、このアプローチがプライベートメソッドで機能しないことです。それで、@foo.send(:private_method)のようなsthを_should_receive_と組み合わせて使用​​する方法はありますか?または他の構文?

26
23tux

should_receive(:method)は、:methodがパブリックでもプライベートでも機能します...

23
Justin Aiken

_allow_any_instance_of_メソッドを使用して、クラスのインスタンスをスタブまたはモックすることができます。 classという名前のFooがあり、いくつかのprivateメソッドを使用すると、このようなことができます

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

moduleもある場合は、次のようにすることができます

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

allow_any_instance_of()メソッドの詳細については、 公式ドキュメント を参照してください。

11
Sinscary

なぜプライベートメソッドをテストしたいのですか?理由のために非公開です。外線からのアクセスを防ぐため。プライベートメソッドに依存するパブリックメソッドのテストで十分です。

2
Richard Brown