As the commend by Stefan said, look for some code that might be redirecting or silencing stdout. I just had the same problem, and turns out my project had this code:
def initialize_print
@previous_stdout = $stdout
@previous_stderr = $stderr
$stdout = StringIO.new
$stderr = StringIO.new
end
def finalize_print
unless passed?
STDOUT.puts $stdout.string if $stdout.string
STDERR.puts $stderr.string if $stderr.string
end
$stdout = @previous_stdout
$stderr = @previous_stderr
end
And then every test called these in setup
/teardown
. It was tricky to find because it was defined in various places, and one of them was a gem external to the project, so look for it because it might not be obvious at first glance.