kook/spec/spec_helper.rb
@@@No user configured@@@ c0f0c890ca Prepare for unit tests.
2014-01-02 23:36:35 +01:00

62 lines
1.6 KiB
Ruby

# Load all spec files
Dir["./spec/support/**/*.rb"].each {|f| require f}
RSpec.configure do |config|
# Allows using build(), create(), etc. without the "FactoryGirl." part.
config.include FactoryGirl::Syntax::Methods
config.before(:each) do
$0 = "kook" # Pretend we're running as 'kook'
ARGV.clear # Make sure no args are passed to the commands.
@directory = Dir.mktmpdir('kook-spec-') # Create a temp directory to work in.
@orig_directory = Dir.pwd # Save the original directory.
Dir.chdir(@directory) # Change to it. pwd() is the temp directory in the examples.
end
config.after(:each) do
Dir.chdir(@orig_directory) # Change back to the origin directory.
FileUtils.rmtree(@directory) # Remove the temp directory.
end
# Captures the output for analysis later
#
# @example Capture `$stderr`
#
# output = capture(:stderr) { $stderr.puts "this is captured" }
#
# @param [Symbol] stream `:stdout` or `:stderr`
# @yield The block to capture stdout/stderr for.
# @return [String] The contents of $stdout or $stderr
def capture(stream)
begin
stream = stream.to_s
eval "$#{stream} = StringIO.new"
yield
result = eval("$#{stream}").string
ensure
eval("$#{stream} = #{stream.upcase}")
end
result
end
# Silences the output stream
#
# @example Silence `$stdout`
#
# silence(:stdout) { $stdout.puts "hi" }
#
# @param [IO] stream The stream to use such as $stderr or $stdout
# @return [nil]
alias :silence :capture
end
EXAMPLES_DIR = Pathname.new(__FILE__).dirname + 'examples'