状況:ヘルパーメソッドをスタブして、それをラップするメソッドを呼び出して、スタブされたレスポンスを返すことができます。スタブラッパーメソッド(RSpec Mocks)によって呼び出される 'ネストされた'クラスメソッド
コードは次のように設定されている:
class Thing
def self.method_one(foo)
self.method_two(foo, 'some random string')
end
def self.method_two(foo, bar)
self.method_three(foo, bar, 'no meaning')
end
def self.method_three(foo, bar, baz)
"#{foo} is #{bar} with #{baz}"
end
end
私は.method_one
を呼び出し、それが最終的には二重の代わりに本物の.method_three
年代を呼び出す持つことができるように.method_three
を模擬しようとしている:
it "uses the mock for .method_three" do
response_double = 'This is a different string'
thing = class_double("Thing", :method_three => response_double).as_stubbed_const
response = thing.method_one('Hi')
expect(response).to eq(response_double)
end
私は取得しています
エラー:
RSpec::Mocks::MockExpectationError: #<ClassDouble(Thing) (anonymous)> received unexpected message :method_one with ("Hi")
私がしようとしていることは可能ですか?私は明白なステップを欠いているように感じますが、私の最善の努力にもかかわらず、私はこれの例や何かを尋ねる質問を見つけることができませんでした。
(注:それが重要ならば、これはRailsのプロジェクトではありません。)
完璧!私はこれを使用して、サードパーティのAPIからの応答を模擬しています。私の '.method_three'が実際にファラデー接続を返してから別のメソッドを呼び出すので、私は' receive_message_chain'を使う必要がありました。 私の実際のコードはこれです(これは若者を将来的に助けるかもしれません): 'allow(FaradayConnection).to receive_message_chain(:connection、:get).and_return(expected_faraday_response)' – tjukes