3

現在、Pusher と RSpec を使用しています。

Pusher.should_receive( :trigger ).with( 'message', { :data => '12345' })

呼び出しがPusher[ 'channel-id' ].trigger...

これをRSpecでモックする方法は?

4

4 に答える 4

9

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 は手元にありませんが、動作しない理由がわかりません。

于 2013-04-20T05:03:11.733 に答える
0

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.

于 2013-04-21T22:47:00.813 に答える