これに対処するためのopen rspec-mocks issueがあります。私はある時点でそれに対処することを望んでいますが、ブロック実装でany_instance
を使用する既存の仕様スイートを壊さない方法でこれを追加するのは簡単ではありません。追加の引数(例:オブジェクトインスタンス)。
全体的に、any_instance
はいくつかの状況では便利ですが、それは少し臭いです。個々のインスタンスを模擬したりスタブする方法が見つかった場合、一般的に問題は少なくなります。ここで
は、私がテストしていませんが、動作するはずですその周りの仕事です:
orig_new = MyObject.method(:new)
MyObject.stub(:new) do |*args, &block|
orig_new.call(*args, &block).tap do |instance|
instance.stub(:fetch) { instance }
end
end
基本的に私たちがインスタンス化され、それぞれの新しいインスタンスにfetch
をスタブできるように、我々はMyObject.new
に引っ掛けることで、ここでany_instance
をシミュレートしています。
「テストを聞く」ことが重要です。テストするのが難しい場合は、すぐにany_instance
のような電動工具を使用するのではなく、自分のデザインについて何を言うかを考えてください。あなたのオリジナルの質問は、あなたのデザインに関する何かを推測するのに十分な文脈を与えていませんが、これを行う必要があるときに私が始める場所は間違いありません。
私は素晴らしい仕事をしてくれました。どうもありがとう! – jethroo