Skip to content

Commit

Permalink
Capture and print app warnings on test run
Browse files Browse the repository at this point in the history
Configure not to fail the test, for now
  • Loading branch information
bf4 committed Jul 14, 2015
1 parent 954e4c5 commit e7174a7
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 e7174a7

Please sign in to comment.