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

时间:2016-10-03 18:34:41

标签: ruby-on-rails rspec rails-activejob

鉴于此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创建输出,但是我做的越多,我觉得我只是在测试中写出整个方法。有人可以给我一些指导吗?

1 个答案:

答案 0 :(得分:1)

您可以拥有一个csv虚拟文件,并从那里读取内容,然后模拟foo.generate的响应。不确定你想要测试什么,所以我离开了待处理的。

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')