私はテストしたいシンプルな機能を持っています(おそらくほとんどがシンプルコブを和らげるために)。機能は次のとおりです。RSpecでSTDERRをスタブすることはできますか?
メッセージは、Rubyのコアライブラリを含め、任意のクラスにスタブすることができます。
module Utils extend self def blather(msg) msg = "=== " + msg STDERR.puts(msg) Rails.logger.debug(msg) end end
RSpec documentation for stubbingは、と言っています。
しかし、次の
# file: spec/lib/utils_spec.rb
require 'spec_helper'
describe Utils do
context "blather" do
it "should print to STDERR" do
STDERR.any_instance.should_receive(:puts).with("=== zoo")
Utils.blather("zoo")
end
end
end
...私はエラーこのテストはどんな意味があるかどうかの質問にさておき
undefined method `any_instance' for #<IO:<STDERR>>
を取得し、それが(STDERRをスタブすることが可能ですIOクラス)?これはクラスメソッドなので失敗ですか?あるいは、このようなテストのためのより合理的な戦略がありますか?
うん - 。以下の私の「当たり前」の回答を参照してください。 –
PS:STDERR上の$ stderrのを好むに関するヒントをありがとう - (http://stackoverflow.com/questions/4279604/what-is-the-difference-between-stdin-and-stdin-in-rubyはその$を説明しますSTDERRはできませんが、stderrは再割り当てできます)。 –