我正在使用puts命令在我的应用程序中打印一些自定义消息。但是,我不希望这些出现在我的测试输出中。所以,我尝试了一种存根puts
的方法,如下所示。但它仍然输出我的消息。我做错了什么?
stubs(:puts).returns("") #Did not work out
Object.stubs(:puts).returns("") #Did not work out either
puts.stubs.returns "" #Not working as well
Kernel.stubs(:puts).returns "" #No luck
我正在使用Test::Unit
答案 0 :(得分:4)
您可能需要在调用puts
的实际实例上将其存根。例如。如果您在puts
类的实例方法中调用User
,请尝试:
user = User.new
user.stubs(:puts)
user.some_method_that_calls_puts
这同样适用于您尝试在顶级执行范围内测试puts
时:
self.stubs(:puts)
答案 1 :(得分:1)
我要做的是定义一个自定义日志方法(现在基本上调用puts),你可以很容易地在测试中模拟或静默。
这也为您提供了更多功能,例如登录文件。
编辑:或者如果你真的想要存根put,并且你在实例方法中调用它,例如,你可以只是存放该类的实例。
答案 2 :(得分:1)
使用Rails 5 + Mocha:$stdout.stubs(puts: '')
答案 3 :(得分:0)
所以对原帖的评论指向答案:
Kernel.send(:define_method, :puts) { |*args| "" }
我不会沉默所有输出,而只会使测试过程中特定对象的输出静音。
class TestClass
def some_method
...
puts "something"
end
end
it "should do something expected" do
TestClass.send(:define_method, :puts) { |*args| "" }
test_class.some_method.should == "abc123"
end