未定义的方法`receive_message_chain'

时间:2014-05-31 10:37:58

标签: ruby-on-rails rspec mocking

令人惊讶的是找不到任何相关内容。

试图将这一系列方法存根:

Twitter::REST::Client.new(<some credentials>).user.followers_count

我真正想做的是:

allow_any_instance_of(Twitter::REST::Client).to receive_message_chain(:user, :followers_count).and_return 0

但它没有用。发出错误undefined method 'receive_message_chain'

所以我在Rspec-Mocks 3.0上找到了这个教程:https://github.com/rspec/rspec-mocks/blob/master/features/method_stubs/receive_message_chain.feature

尝试了这个:

subject = Twitter::REST::Client
allow(subject).to receive_message_chain(:user, :followers_count).and_return 0
expect(Twitter::REST::Client.new.users.followers_count).to eq 0

只是尝试一下 - 它也不起作用。有什么我做错了吗?

我的rspec-mocks (3.0.0.beta1)确实有Gemfile.lock

其他类型的存根(例如.to receive(:method)正常工作。

1 个答案:

答案 0 :(得分:4)

https://github.com/rspec/rspec-mocks/blob/master/Changelog.md#300beta2--2014-02-17中所述,方法receive_message_chain已在3.0.0.beta2中引入,因此如果您升级rspec-mocks版本(目前位于3.0.0.rc1),你应该对这种语法没问题。