【问题标题】:How can I test an Active Job method with mocks in RSpec?如何在 RSpec 中使用 mock 测试 Active Job 方法?
【发布时间】:2016-10-03 18:34:41
【问题描述】:

鉴于此 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 文件并加载它,然后使用模拟。 allow_any_instance_of(SomeJob).to receive(: generate).and_return(csv.file.content)
  • @vitomd 谢谢,你能用代码写下这个例子吗?我很难尝试复制。

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


【解决方案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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2016-07-02
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多