2012-08-15 27 views
0

我有一些Rspec测试用于测试模块。该模块在我的Rails应用程序中被许多模型使用。为了尽量减少测试时间,我想避免在测试我的模块时加载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 
+0

这里是例子stubing Rails的记录器: 的http:// stackoverflow.com/questions/8249815/how-to-rspec-mock-ruby-rails-logger-class – 2012-08-15 13:35:07

+0

是的,stub()。和_return()方法就是我要找的。谢谢。你想提交这个答案吗?我会将其标记为解决方案。 – 2012-08-15 17:17:46

+0

谢谢添加,以便问题有答案。 – 2012-08-16 11:45:41

回答

2

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

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

取消存根与底:

Rails.unstub(:logger) 

所有学分去老总在下面的链接How to rspec mock ruby rails logger class