-
-
Save adamstegman/926858 to your computer and use it in GitHub Desktop.
RSpec.configure do |config| | |
config.before(:all, &:silence_output) | |
config.after(:all, &:enable_output) | |
end | |
# Redirects stderr and stdout to /dev/null. | |
def silence_output | |
@orig_stderr = $stderr | |
@orig_stdout = $stdout | |
# redirect stderr and stdout to /dev/null | |
$stderr = File.new('/dev/null', 'w') | |
$stdout = File.new('/dev/null', 'w') | |
end | |
# Replace stdout and stderr so anything else is output correctly. | |
def enable_output | |
$stderr = @orig_stderr | |
$stdout = @orig_stdout | |
@orig_stderr = nil | |
@orig_stdout = nil | |
end |
Credit where it's due - this is adapted from http://benevolentcode.com/2011/03/temporarily-redirect-stdout-in-ruby/. Glad you found it useful!
Thanks for the gist!
I am getting some errors regarding "private method `silence_output' called for #RSpec::Core::ExampleGroup::Nested_1:0x007f7f8aa89b00". Fixed by changing to the following:
config.before(:all) { silence_output }
config.after(:all) { enable_output }
I encountered the same errors as @jimjh when using this gist and can confirm the fix works with Rails 3.2.8 & Rspec 2.12.0, thanks!
Also can use Kernel.silence_stream:
silence_stream(STDOUT) do
...
end
Great post. I modified silence_output to redirect the output to files instead of the void. Works out great.
def silence_output
@orig_stderr = $stderr
@orig_stdout = $stdout
# redirect stderr and stdout to /dev/null
$stderr = File.new('./spec/stdout.txt', 'w')
$stdout = File.new('./spec/stderr.txt', 'w')
end
Hi guys, above mentioned methods doesn't help me in redirecting stdout for system call (` method). But thanks you all, these examples helped me in identifying the workaround. Here is the workaround I have used.
config.before :each do
original_system_call_method = GitUtils.method(:`)
allow(GitUtils).to receive(:`) do |arg|
Kernel.silence_stream(STDERR) do
original_system_call_method.call(arg)
end
end
end
# GitUtils is my class where I have multiple utility methods which usage backtick(`) to run shell commands
Any way to still use a debugger?
this also works:
bin/rspec spec/models/user_spec.rb 2>/dev/null
This gist helped me a lot and saved a lot of time :) Thank you Adam !