我有一個簡單的函數,我想測試(也許主要是爲了安撫simplecov)。該功能是:我可以在RSpec中存儲STDERR嗎?
module Utils
extend self
def blather(msg)
msg = "=== " + msg
STDERR.puts(msg)
Rails.logger.debug(msg)
end
end
的RSpec documentation for stubbing說:
消息可以在任何類存根,包括那些在Ruby的核心庫。
但以下幾點:
# 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類)?這是失敗的,因爲它是一個類方法?或者是否有這種測試更明智的策略?
是的 - 見下面我的「咄」的答案。 – 2012-04-11 17:28:28
PS:感謝有關傾向於STDERR的$ stderr的提示 - (http://stackoverflow.com/questions/4279604/what-is-the-difference-between-stdin-and-stdin-in-ruby解釋說$ stderr可以被重新分配,而STDERR不能)。 – 2012-04-11 17:29:54