5

主にテストのデバッグ目的で、メソッドがスタブ化されているかどうかを確認する方法があるかどうかを知りたいです。

たとえば、私のテストの 1 つで、次のように書いています。

Model.any_instance.stub(:method)

そして、実際のインスタンスがあるときは、次のように書きたいと思います:

an_instance_of_model.stubbed?(:method) # expecting to return true
4

2 に答える 2

4

メソッドを使用してクラスレベルでメソッドをスタブ化した場合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)

于 2013-12-09T13:55:48.357 に答える