2014-01-18 62 views
0

我想发送一条警告给用户,如果他们给::config方法错误的键,但也让该方法继续执行。所以,这是写给STDOUT的,对吧?RSpec测试使用Ruby写入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

PrintKernel模块的一类方法。作为实例方法,Kernel模块的所有类方法都包含在Object类中。所有其他课程都是从Object课程开始的。所以你应该期待你从print那里得到它的课程来获得它:

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

这样的工作,但只有当我打印为'Kernel.print'时才有效。如果我只是调用'print',则显示输出,但测试仍然失败。想知道为什么会这样? –

+0

尝试使用'configure opts'方法定义的类的名称替换'Kernel' –

+0

非常棒的人。非常感谢。 –