ruby-on-rails - 有没有办法在 RSpec 3 中 stub 特定类的所有方法?

标签 ruby-on-rails ruby rspec

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

我在想类似的东西

# 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 但我不确定它是如何工作的。

有人能帮忙吗?

最佳答案

是的,stub_everything 已弃用。

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

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

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

参见 Null object doubles文档以获取更多信息。

关于ruby-on-rails - 有没有办法在 RSpec 3 中 stub 特定类的所有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061440/

相关文章:

ruby-on-rails - 一页布局的联系我表格

ruby-on-rails - Rails Anemone 和 Postgres 只存储 URL

ruby-on-rails - Rails - 如何使用嵌套属性验证表单?

ruby-on-rails - Rails Carrierwave 从版本内访问父模型

ruby - 从 Ruby 中的文件名动态创建自动加载命令

ruby-on-rails - 堆栈级别太深 - Rspec

javascript - 目录 : Accept File Upload and Copy&Paste Upload

ruby-on-rails - 如何在没有 Controller / Action 的情况下直接路由到 View ?

javascript - 部署 Ruby On Rails 项目时出现意外的 INDENT

ruby - 有没有办法强制 RSpec 重新评估 let 语句?