主にテストのデバッグ目的で、メソッドがスタブ化されているかどうかを確認する方法があるかどうかを知りたいです。
たとえば、私のテストの 1 つで、次のように書いています。
Model.any_instance.stub(:method)
そして、実際のインスタンスがあるときは、次のように書きたいと思います:
an_instance_of_model.stubbed?(:method) # expecting to return true
主にテストのデバッグ目的で、メソッドがスタブ化されているかどうかを確認する方法があるかどうかを知りたいです。
たとえば、私のテストの 1 つで、次のように書いています。
Model.any_instance.stub(:method)
そして、実際のインスタンスがあるときは、次のように書きたいと思います:
an_instance_of_model.stubbed?(:method) # expecting to return true
メソッドを使用してクラスレベルでメソッドをスタブ化した場合any_instance
は、テストで次のようなものを使用してこれを確認できます。
RSpec::Mocks.space.any_instance_recorder_for(YourClass).already_observing?(:method_name)
ただし、特定のインスタンスをスタブ化した場合は、次を使用してこれを見つけることができます。
!(your_instance.method(:method_name).owner >= your_instance.class)
したがって、これらもヘルパー モジュールで組み合わせることができます。
module Helpers
def stubbed?(object, method)
RSpec::Mocks.space.any_instance_recorder_for(object.class).already_observing?(method) || !(object.method(method).owner >= object.class)
end
end
それを RSpec.configure に含めます。
require 'helpers'
RSpec.configure do |config|
...
config.include Helpers
...
end
注意: これは @PJSCopeland のコメントに基づいて更新されました。3.6 未満の RSpec のバージョンを使用している場合は、.space
呼び出しを削除します。RSpec::Mocks.any_instance_recorder_for(YourClass).already_observing?(:method_name)