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 回答
7

较新版本的 Pusher 支持更容易存根的更浅的 API:

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

Pusher.trigger("channel-id", "message", { data: "12345" })
于 2014-06-15T10:12:03.880 回答
3

还有一个pusher-fake可以为你的测试启动一个假服务器,所以你不必存根——它让你的应用程序可以通过那个假服务器发送和接收。

于 2014-06-15T14:39:48.427 回答
0

Michael Papile 的回答基本上是正确的。这是我使用的代码:

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

实际上,事实证明这段代码不起作用,因为它不匹配channel_id

于 2013-04-21T22:47:00.813 回答