有没有办法在 Rails 中模拟/存根“放置”

bra*_*boy 5 ruby testing ruby-on-rails-3

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

我在用 Test::Unit

Kel*_*vin 6

您可能需要在调用puts. 例如,如果您正在调用类puts的实例方法User,请尝试:

user = User.new
user.stubs(:puts)
user.some_method_that_calls_puts
Run Code Online (Sandbox Code Playgroud)

当您尝试puts在顶级执行范围内进行测试时,这同样适用:

self.stubs(:puts)
Run Code Online (Sandbox Code Playgroud)


Bit*_*oet 1

我要做的是定义一个自定义日志方法(现在基本上调用 put),您可以在测试中轻松模拟或静默该方法。

这也让您可以选择稍后使用它执行更多操作,例如记录到文件。

编辑:或者,如果您确实想要存根 put,并且例如在实例方法中调用它,则可以只对该类的实例存根 put。