2012-08-15 69 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