0

我有一些用于测试模块的 Rspec 测试。我的 Rails 应用程序中的许多模型都使用该模块。为了将测试时间降到最低,我想在测试我的模块时避免加载 Rails。

问题是有一些方法包含救援,而这些救援提到了 Rails 调试器。当 Rspec 在 Rails 中看到大写字母 'r' 时,它会遇到麻烦,因为它认为它是一个未初始化的常量。

我希望如果我将日志信息封装到它自己的方法中,我可以避免这个问题。这就是我想出的。但是如果我走这条路,我需要存根救援代码或 log_info 方法。是对的吗?我该怎么做?我应该存根哪一个?

def download_robots_file(page)
  file = Net::HTTP.get(URI("#{page}robots.txt"))
rescue StandardError => ex
  log_info('robot_file', ex)
end
....
private

def log_info(problem, exception_issue)
  Rails.logger.debug("Couldn't download #{problem}: " + exception_issue.inspect)

end
4

1 回答 1

2

您可以添加到要存根的存根链方法。

Rails.stub_chain(:logger).and_return(mocked_logger_instance)

最后取消存根:

Rails.unstub(:logger)

所有学分都归于以下链接上的先生How to rspec mock ruby​​ rails logger class

于 2012-08-16T11:44:57.033 回答