Skip to content

Commit

Permalink
Merge pull request #972 from bf4/capture_app_warnings
Browse files Browse the repository at this point in the history
Capture app warnings on test run
  • Loading branch information
joaomdmoura committed Jul 31, 2015
2 parents 438d8f4 + e7174a7 commit 7bc1666
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
57 changes: 57 additions & 0 deletions test/capture_warnings.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# https://raw.githubusercontent.com/metric_fu/metric_fu/master/spec/capture_warnings.rb
require "tempfile"
require "fileutils"

class CaptureWarnings
def initialize(fail_on_warnings = true)
@fail_on_warnings = fail_on_warnings
@stderr_file = Tempfile.new("app.stderr")
@app_root ||= Dir.pwd
@output_dir = File.join(app_root, "tmp")
FileUtils.mkdir_p(output_dir)
@bundle_dir = File.join(app_root, "bundle")
end

def before_tests
$stderr.reopen(stderr_file.path)
$VERBOSE = true
at_exit { $stderr.reopen(STDERR) }
end

def after_tests
stderr_file.rewind
lines = stderr_file.read.split("\n").uniq
stderr_file.close!

$stderr.reopen(STDERR)

app_warnings, other_warnings = lines.partition { |line|
line.include?(app_root) && !line.include?(bundle_dir)
}

if app_warnings.any?
puts <<-WARNINGS
#{'-' * 30} app warnings: #{'-' * 30}
#{app_warnings.join("\n")}
#{'-' * 75}
WARNINGS
end

if other_warnings.any?
File.write(File.join(output_dir, "warnings.txt"), other_warnings.join("\n") << "\n")
puts
puts "Non-app warnings written to tmp/warnings.txt"
puts
end

# fail the build...
if fail_on_warnings && app_warnings.any?
abort "Failing build due to app warnings: #{app_warnings.inspect}"
end
end

private
attr_reader :stderr_file, :app_root, :output_dir, :bundle_dir, :fail_on_warnings
end
6 changes: 6 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)

require "capture_warnings"
@capture_warnings = CaptureWarnings.new(fail_build = false)
@capture_warnings.before_tests
at_exit do
@capture_warnings.after_tests
end
require 'active_model_serializers'

class Foo < Rails::Application
Expand Down

0 comments on commit 7bc1666

Please sign in to comment.