當前使用Pusher和RSpec。如何在Ruby中使用RSpec模擬Pusher?
Pusher.should_receive(:trigger).with('message', { :data => '12345' })
這工作,除呼叫Pusher[ 'channel-id' ].trigger...
如何使用RSpec嘲笑呢?
當前使用Pusher和RSpec。如何在Ruby中使用RSpec模擬Pusher?
Pusher.should_receive(:trigger).with('message', { :data => '12345' })
這工作,除呼叫Pusher[ 'channel-id' ].trigger...
如何使用RSpec嘲笑呢?
那麼[]
是一個函數名,所以它可以被樁住。在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的答案基本上是正確的。下面是我使用的代碼:
Pusher.stub_chain(:[] , :trigger)
Pusher[ channel_id ].should_receive(:trigger).with('message', { :data => '12345' })
實際上,事實證明這個代碼不工作,因爲它不符合channel_id
。
推的較新版本支持較淺的API更易於存根:
expect(Pusher).to receive(:trigger).with("channel-id", "message", { data: "12345" })
Pusher.trigger("channel-id", "message", { data: "12345" })
還有pusher-fake這對於你的測試啓動一個假的服務器,所以你不必存根 - 它可以讓您的應用程序都通過該假服務器發送和接收。