mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-24 06:46:50 +00:00
Make better use of Minitest's lifecycle
http://blog.arkency.com/2013/06/are-we-abusing-at-exit/
This commit is contained in:
parent
f2279946b6
commit
b18671fd03
@ -10,49 +10,56 @@ class CaptureWarnings
|
|||||||
@output_dir = File.join(app_root, 'tmp')
|
@output_dir = File.join(app_root, 'tmp')
|
||||||
FileUtils.mkdir_p(output_dir)
|
FileUtils.mkdir_p(output_dir)
|
||||||
@bundle_dir = File.join(app_root, 'bundle')
|
@bundle_dir = File.join(app_root, 'bundle')
|
||||||
|
@output = STDOUT
|
||||||
end
|
end
|
||||||
|
|
||||||
def before_tests
|
def execute!
|
||||||
$stderr.reopen(stderr_file.path)
|
|
||||||
$VERBOSE = true
|
$VERBOSE = true
|
||||||
at_exit { $stderr.reopen(STDERR) }
|
$stderr.reopen(stderr_file.path)
|
||||||
end
|
|
||||||
|
|
||||||
def after_tests
|
Minitest.after_run do
|
||||||
stderr_file.rewind
|
stderr_file.rewind
|
||||||
lines = stderr_file.read.split("\n")
|
lines = stderr_file.read.split("\n")
|
||||||
stderr_file.close!
|
stderr_file.close!
|
||||||
|
|
||||||
$stderr.reopen(STDERR)
|
$stderr.reopen(STDERR)
|
||||||
|
after_tests(lines)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# rubocop:disable Metrics/AbcSize
|
||||||
|
def after_tests(lines)
|
||||||
app_warnings, other_warnings = lines.partition { |line|
|
app_warnings, other_warnings = lines.partition { |line|
|
||||||
line.include?(app_root) && !line.include?(bundle_dir)
|
line.include?(app_root) && !line.include?(bundle_dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
header = "#{'-' * 22} app warnings: #{'-' * 22}"
|
||||||
|
output.puts
|
||||||
|
output.puts header
|
||||||
|
|
||||||
if app_warnings.any?
|
if app_warnings.any?
|
||||||
puts <<-WARNINGS
|
output.puts app_warnings.join("\n")
|
||||||
#{'-' * 30} app warnings: #{'-' * 30}
|
else
|
||||||
|
output.puts 'None. Yay!'
|
||||||
#{app_warnings.join("\n")}
|
|
||||||
|
|
||||||
#{'-' * 75}
|
|
||||||
WARNINGS
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if other_warnings.any?
|
if other_warnings.any?
|
||||||
File.write(File.join(output_dir, 'warnings.txt'), other_warnings.join("\n") << "\n")
|
File.write(File.join(output_dir, 'warnings.txt'), other_warnings.join("\n") << "\n")
|
||||||
puts
|
output.puts
|
||||||
puts 'Non-app warnings written to tmp/warnings.txt'
|
output.puts 'Non-app warnings written to tmp/warnings.txt'
|
||||||
puts
|
output.puts
|
||||||
end
|
end
|
||||||
|
|
||||||
|
output.puts
|
||||||
|
output.puts '-' * header.size
|
||||||
|
|
||||||
# fail the build...
|
# fail the build...
|
||||||
if fail_on_warnings && app_warnings.any?
|
if fail_on_warnings && app_warnings.any?
|
||||||
abort "Failing build due to app warnings: #{app_warnings.inspect}"
|
abort "Failing build due to app warnings: #{app_warnings.inspect}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
# rubocop:enable Metrics/AbcSize
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
attr_reader :stderr_file, :app_root, :output_dir, :bundle_dir, :fail_on_warnings
|
attr_reader :stderr_file, :app_root, :output_dir, :bundle_dir, :fail_on_warnings, :output
|
||||||
end
|
end
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
begin
|
begin
|
||||||
require 'active_support/testing/stream'
|
require 'active_support/testing/stream'
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
|
require 'tempfile'
|
||||||
module ActiveSupport
|
module ActiveSupport
|
||||||
module Testing
|
module Testing
|
||||||
module Stream #:nodoc:
|
module Stream #:nodoc:
|
||||||
|
|||||||
@ -9,24 +9,27 @@ require 'active_support/json'
|
|||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
FileUtils.mkdir_p(File.expand_path('../../tmp/cache', __FILE__))
|
FileUtils.mkdir_p(File.expand_path('../../tmp/cache', __FILE__))
|
||||||
|
|
||||||
|
gem 'minitest'
|
||||||
require 'minitest/autorun'
|
require 'minitest/autorun'
|
||||||
# Ensure backward compatibility with Minitest 4
|
if defined?(Minitest::Test)
|
||||||
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
|
# Minitest 5
|
||||||
|
# https://github.com/seattlerb/minitest/blob/e21fdda9d/lib/minitest/autorun.rb
|
||||||
require 'capture_warnings'
|
# https://github.com/seattlerb/minitest/blob/e21fdda9d/lib/minitest.rb#L45-L59
|
||||||
@capture_warnings = CaptureWarnings.new(fail_build = true)
|
|
||||||
@capture_warnings.before_tests
|
|
||||||
if Minitest.respond_to?(:after_run)
|
|
||||||
Minitest.after_run do
|
|
||||||
@capture_warnings.after_tests
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
at_exit do
|
# Minitest 4
|
||||||
STDOUT.puts 'Minitest.after_run not available.'
|
# https://github.com/seattlerb/minitest/blob/644a52fd0/lib/minitest/autorun.rb
|
||||||
@capture_warnings.after_tests
|
# https://github.com/seattlerb/minitest/blob/644a52fd0/lib/minitest/unit.rb#L768-L787
|
||||||
|
# Ensure backward compatibility with Minitest 4
|
||||||
|
Minitest = MiniTest unless defined?(Minitest)
|
||||||
|
Minitest::Test = MiniTest::Unit::TestCase
|
||||||
|
def Minitest.after_run(&block)
|
||||||
|
MiniTest::Unit.after_tests(&block)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
require 'capture_warnings'
|
||||||
|
CaptureWarnings.new(_fail_build = true).execute!
|
||||||
|
|
||||||
require 'active_model_serializers'
|
require 'active_model_serializers'
|
||||||
|
|
||||||
require 'support/stream_capture'
|
require 'support/stream_capture'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user