我有一个我想测试的简单功能(也许主要是为了安抚 simplecov)。功能是:
module Utils
extend self
def blather(msg)
msg = "=== " + msg
STDERR.puts(msg)
Rails.logger.debug(msg)
end
end
存根的RSpec 文档说:
消息可以在任何类上存根,包括 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 类)?这是因为它是类方法而失败吗?或者这种测试有更明智的策略吗?