【发布时间】:2021-04-26 10:50:05
【问题描述】:
我是 rspec 的新手。我正在使用 receive_message_chain 和存根方法链,它现在工作正常。
正在测试的代码
Abc::ImportJob < ImportBaseJob
def self.perform
base_class_meth(param1, param2)
end
end
Abc::ImportBaseJob
def base_class_meth(param1, param2)
Book.to_be_published.find_each do |book|
publish_report(book)
end
end
def publish_report(book)
Publishjob.perform
end
结束
rspec
before do
allow(Book).to receive_message_chain(:to_be_published, :find_each).and_yield(book1)
end
现在我正在尝试摆脱 receive_message_chain 并在此处使用 double。
使用双精度代码:
before do
books_to_be_published = double('books_to_be_published')
allow(Book).to receive(:to_be_published).and_return('books_to_be_published')
allow(books_to_be_published).to receive(:find_each).and_yield(book1)
end
it 'should publish kafka message at event start' do
expect(PublishJob).to receive(:new).with(book1)
ABC::ImportJob.perform
end
但结果是 预计 1 次有论据 收到:0次
我在这里做错了什么。
【问题讨论】:
-
什么是
dispatch_ev1?您的代码摘录中没有提到它。如果省略参数只检查方法,即expect(PublishJob).to receive(:new),有什么区别吗? -
更新了问题。它不是 dispatch_ev1,是 book1。
标签: ruby-on-rails ruby rspec double