在RSpec中捕获STDOUT
我是Ruby的unit testing的新手,我在创建一个检查STDOUT的规范时遇到了一些麻烦。 我知道如果我正在测试的代码是在类/方法中,如何测试STDOUT,但我想测试一个来自常规Ruby文件的puts
语句,该文件不属于Class或Method。
这是来自my_file.rb
的简单一行
puts "Welcome to the Book Club!"
这是规格
my_spec.rb
require_relative 'my_file.rb' describe "Something I'm Testing" do it 'should print Welcome to the Book Club!' do expect {$stdout}.to output("Welcome to the Book Club!\n").to_stdout end end
我收到以下错误消息:
Failures: 1) Something I'm Testing should print Welcome to the Book Club! Failure/Error: expect {$stdout}.to output("Welcome to the Book Club!\n").to_stdout expected block to output "Welcome to the Book Club!\n" to stdout, but output nothing Diff: @@ -1,2 +1 @@ -Welcome to the Book Club! # ./spec/my_spec.rb:9:in `block (2 levels) in ' Finished in 0.01663 seconds (files took 0.08195 seconds to load) 1 example, 1 failure Failed examples: rspec ./spec/my_spec.rb:7 # Something I'm Testing should print Welcome to the Book Club!
我以为我可以使用$stdout
从my_file.rb
捕获STDOUT,但这不起作用。 输出一直没有说什么。 我发现这篇文章讲的是通过StringIO
测试STDOUT输出来捕获输出
但这种方法对我不起作用。 我究竟做错了什么?
谢谢!
在测试运行之前,在顶部包含my_file.rb
时, puts
调用puts
方法。 将其包含在您的测试中。
describe "Something I'm Testing" do it 'should print Welcome to the Book Club!' do expect { require_relative 'my_file.rb' }.to output("Welcome to the Book Club!\n").to_stdout end end