在RSpec中检查(不存在)`puts`

Joh*_*ler 10 ruby tdd bdd rspec mocking

我在ruby项目中使用rspec进行测试,并且我想规定在使用-q选项时我的程序不应输出任何内容.我试过了:

Kernel.should_not_receive :puts
Run Code Online (Sandbox Code Playgroud)

当输出到控制台时,这不会导致测试失败.

如何验证文本输出的缺失?

Sut*_*tto 15

puts在内部使用$ stdout.由于它的工作方式,最简单的检查方法是简单地使用:$stdout.should_not_receive(:write)

哪个检查没有按预期写入stdout.Kernel.puts(如上所述)只会在它被明确地调用时导致测试失败(例如Kernel.puts"Some text"),其中大多数情况下它在当前对象的范围内调用.