有没有办法在RSpec 3中存根特定类的所有方法?

时间:2015-10-11 04:13:07

标签: ruby-on-rails ruby rspec

我有一个自制的服务类,它帮助我干掉发送推送通知,我希望能够存根属于该类的所有方法。

我在考虑像

这样的东西
# Service Class
class PushService
  def self.send_message
    ...
  end

  def self.send_payment_confirmation
    ...
  end
end

在我的规范测试中,我希望能够做到

RSpec.describe "blah" do
  before do
    allow(PushService).to receive_everything.and_return({})
  end

end

我环顾四周,看来stub_everything()已被弃用,建议使用double as_null_object,但我不确定它是如何工作的。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

是的,stub_everything已被弃用。

是的,您可以使用as_null_object来存储测试中的所有内容,如下所示:

let(:push_service) { double(PushService).as_null_object }

使用as_null_object时,您的对象将响应任何未实现的方法。它还允许您使用显式存根和明确的期望。

有关详细信息,请参阅Null object doubles文档。