0

我有以下代码结构(长度缩写):

module Uploader
  def self.execute(folder)
    report_record = Reporting::GenerateReports.call
    establish_api_connection
    upload_file(report_record.first_report, folder)
  end

  def self.upload_file(report, folder)
    upload_content(report.download, "/#{folder}/#{report.filename}")
  end

  def self.upload_content(content, path)
    ...
  end
end

目前,我可以指定调用executeRSpec 中的方法以确保upload_file被调用。但是,我如何模拟检查upload_file调用upload_content

4

1 回答 1

1

请记住,expect两者allow存根方法调用 - 它们阻止它实际运行。如果要检查是否调用了一个方法,并确保方法调用了另一个方法,则需要使用.and_call_original.

# Some setup
folder = "some fake folder" # not sure the data type
report = Reporting::GenerateReports.call
allow(Reporting::GenerateReports).to receive(:call).and_return(stub_report)

# Expectations
expect(Uploader).to receive(:execute).with(some_folder).and_call_original
expect(Uploader).to receive(:upload_file).with(report, folder)

allow(Reporting::GenerateReports)行是必需的,因为report_record变量是您的execute方法中定义的(无法通过依赖注入从测试中传递自定义值)。为确保将正确的参数传递给upload_file,因此需要将其剔除。

于 2020-05-13T16:49:25.787 回答