現在、Pusher と RSpec を使用しています。
Pusher.should_receive( :trigger ).with( 'message', { :data => '12345' })
呼び出しがPusher[ 'channel-id' ].trigger...
これをRSpecでモックする方法は?
Well[]
は関数名なので、スタブ化できます。Pusher のソースには、次のように表示されます。def_delegators :default_client, :webhook, :channel, :[]
したがって、これらのメソッドはすべて に転送されdefault_client
ます。したがって、これは実際には一連のメソッドです。
私はあなたがしたいことをこのようにします。
mock_client = mock('client')
Pusher.stub(:[]).with('channel-id').and_return(mock_client)
mock_client.should_receive( :trigger ).with( 'message', { :data => '12345' })
現在 rspec は手元にありませんが、動作しない理由がわかりません。
Michael Papile's answer is essentially correct. Here's the code I used:
Pusher.stub_chain( :[] , :trigger )
Pusher[ channel_id ].should_receive( :trigger ).with( 'message', { :data => '12345' })
Actually, it turns out this code does not work because it does not match channel_id
.