如何在 RSpec 中使用模拟测试 Active Job 方法?

How can I test an Active Job method with mocks in RSpec?

鉴于此 Active Job 方法在它调用的方法之一中有很多开销。在本例中,foo.generate 生成了一个大的 CSV 文件。

class SomeJob < ApplicationJob
  queue_as :default

  def perform(foo)
    csv = foo.generate
    JobMailer.send_csv(foo.email, csv).deliver
  end
end

我知道您可以使用模拟来创建 foo.generate 的输出,但我越是这样做,我觉得我只是在测试中写出整个方法。有人可以给我一些指导吗?

你可以有一个 csv 虚拟文件,从那里读取内容,然后模拟 foo.generate 的响应。不确定你想测试什么,所以我留下了 except 未决。

describe "csv" do
  let(:csv_doc) { IO.read(Rails.root.join("spec", "fixtures", "dummy_csv.csv")) }


  it "test something" do
    allow_any_instance_of(Foo).to receive(:generate).and_return(csv_doc)
    expect(something).to be true
  end
end 

那是如果您关心 csv 内容,否则您只需要做这样的事情。在本例中,Foo 是 foo 类型。

allow_any_instance_of(Foo).to receive(:generate).and_return('something')