【问题标题】:RSpec double - stubRSpec 双存根
【发布时间】: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


【解决方案1】:

不应该

allow(Book).to receive(:to_be_published).and_return(books_to_be_published)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2014-09-15
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多