首页 > 解决方案 > 为单例类 RSpec 编写规范

问题描述

我在单例类中有一些方法需要在 Ruby on Rails 上编写 rspec。这是示例类

class Logger
  class << self
    def log(event, msg)
      data = Helper.send(event, msg)
      PublishJob.perform(data)
    end
  end
end

如何编写一个名为 Helper.send... 的测试方法并运行作业?

谢谢大家

标签: ruby-on-railsrubyrspecsingleton

解决方案


您可以测试Logger调用HelperPublishJob通过存根类的方法:

describe Logger do
  let(:event) { double("Event") }
  let(:msg) { double("Message") }
  let(:data) { double("Data") }

  before do
    allow(Helper).to receive(:send).and_return(data)
    allow(PublishJob).to receive(:perform)
  end

  before { Logger.log(event, msg) }

  it "sends a message and performs a job" do
    expect(Helper).to have_received(:send).with(event, msg)
    expect(PublishJob).to have_received(:perform).with(data)
  end
end

并且执行作业的细节可以在作业本身的规范文件中进行测试。


推荐阅读