2016-10-03 111 views
0

鉴于此活动作业方法在其调用的某个方法中有很多开销。在这种情况下,这是一个大的CSV文件的foo.generate如何在RSpec中使用mock测试活动作业方法?

class SomeJob < ApplicationJob 
    queue_as :default 

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

我知道,你可以用嘲笑创建输出foo.generate,但我做的越多,我觉得我只是写了在我的测试整个方法。有人能给我一些指导吗?

+0

你可以有一个虚拟的csv文件并加载它,然后使用模拟。 allow_any_instance_of(SomeJob).to接收(:生成).and_return(csv.file.content) – vitomd

+0

@vitomd谢谢,你可以在代码中编写示例吗?我很难尝试复制。 –

回答

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

非常感谢。 –