RSpec测试用Ruby写入STDOUT

时间:2014-01-18 00:12:39

标签: ruby rspec warnings stdout

如果用户提供::config方法错误的密钥,我想向用户发送警告,但也让方法继续执行。那么,这是写给STDOUT的,对吧?

def configure opts={}
  if (@valid_config_keys - opts.keys).any?
    print "WARNING message"
  end
  # rest of method
end

我有一个没有通过的测试:

it "should warn the user against bad data" do
  STDOUT.should_receive(:print).with("WARNING message")
  subject
end

即使我在运行测试时看到显示警告消息。我无法弄清楚如何在这里访问正确的STDOUT对象,因为代码肯定有效。我还将警告消息直接从测试中复制到生产代码中,因此我确定消息中没有任何小的拼写错误。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

Print Kernel模块的类方法。 Kernel模块的所有类方法都作为实例方法包含在Object类中。所有其他类都来自Object类。因此,您应该期望从中调用print的类来接收它:

YourClassName.should_receive(:print).with("WARNING message")