2013-04-20 54 views

回答

8

那麼[]是一個函數名,所以它可以被樁住。在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方便,但看不出爲什麼它不起作用。

0

Michael Papile的答案基本上是正確的。下面是我使用的代碼:

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

實際上,事實證明這個代碼不工作,因爲它不符合channel_id

5

推的較新版本支持較淺的API更易於存根:

expect(Pusher).to receive(:trigger).with("channel-id", "message", { data: "12345" }) 

Pusher.trigger("channel-id", "message", { data: "12345" }) 
3

還有pusher-fake這對於你的測試啓動一個假的服務器,所以你不必存根 - 它可以讓您的應用程序都通過該假服務器發送和接收。