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)

すべてのクレジットは、次のリンクでミスターに送られます。rspecモックルビーレールロガークラスをrspecする方法

于 2012-08-16T11:44:57.033 に答える