1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/railties/test/test_unit/reporter_test.rb
yuuji.yaginuma 4f8c36ab70 display detailed information in inline reporting
The errors message only was not displayed, as if it did not use the inline reporting,
modified to also information the method name and the like in error are displayed.

```
# before
Failed assertion, no message given.

bin/rails test test/models/user_test.rb:5
```

```
# after
Failure:
UserTest#test_the_truth:
Failed assertion, no message given.

bin/rails test test/models/user_test.rb:5
```
2015-12-21 07:48:53 +09:00

150 lines
4.3 KiB
Ruby

require 'abstract_unit'
require 'rails/test_unit/reporter'
class TestUnitReporterTest < ActiveSupport::TestCase
class ExampleTest < Minitest::Test
def woot; end
end
setup do
@output = StringIO.new
@reporter = Rails::TestUnitReporter.new @output, output_inline: true
end
test "prints rerun snippet to run a single failed test" do
@reporter.record(failed_test)
@reporter.report
assert_match %r{^bin/rails test .*test/test_unit/reporter_test.rb:\d+$}, @output.string
assert_rerun_snippet_count 1
end
test "prints rerun snippet for every failed test" do
@reporter.record(failed_test)
@reporter.record(failed_test)
@reporter.record(failed_test)
@reporter.report
assert_rerun_snippet_count 3
end
test "does not print snippet for successful and skipped tests" do
@reporter.record(passing_test)
@reporter.record(skipped_test)
@reporter.report
assert_no_match 'Failed tests:', @output.string
assert_rerun_snippet_count 0
end
test "prints rerun snippet for skipped tests if run in verbose mode" do
verbose = Rails::TestUnitReporter.new @output, verbose: true
verbose.record(skipped_test)
verbose.report
assert_rerun_snippet_count 1
end
test "allows to customize the executable in the rerun snippet" do
original_executable = Rails::TestUnitReporter.executable
begin
Rails::TestUnitReporter.executable = "bin/test"
@reporter.record(failed_test)
@reporter.report
assert_match %r{^bin/test .*test/test_unit/reporter_test.rb:\d+$}, @output.string
ensure
Rails::TestUnitReporter.executable = original_executable
end
end
test "outputs failures inline" do
@reporter.record(failed_test)
@reporter.report
expect = %r{\A\n\nFailure:\nTestUnitReporterTest::ExampleTest#woot:\nboo\n\nbin/rails test test/test_unit/reporter_test.rb:\d+\n\n\z}
assert_match expect, @output.string
end
test "outputs errors inline" do
@reporter.record(errored_test)
@reporter.report
expect = %r{\A\n\nError:\nTestUnitReporterTest::ExampleTest#woot:\nArgumentError: wups\n No backtrace\n\nbin/rails test .*test/test_unit/reporter_test.rb:6\n\n\z}
assert_match expect, @output.string
end
test "outputs skipped tests inline if verbose" do
verbose = Rails::TestUnitReporter.new @output, verbose: true, output_inline: true
verbose.record(skipped_test)
verbose.report
expect = %r{\A\n\nSkipped:\nTestUnitReporterTest::ExampleTest#woot:\nskipchurches, misstemples\n\nbin/rails test test/test_unit/reporter_test.rb:\d+\n\n\z}
assert_match expect, @output.string
end
test "does not output rerun snippets after run" do
@reporter.record(failed_test)
@reporter.report
assert_no_match 'Failed tests:', @output.string
end
test "fail fast interrupts run on failure" do
fail_fast = Rails::TestUnitReporter.new @output, fail_fast: true
interrupt_raised = false
# Minitest passes through Interrupt, catch it manually.
begin
fail_fast.record(failed_test)
rescue Interrupt
interrupt_raised = true
ensure
assert interrupt_raised, 'Expected Interrupt to be raised.'
end
end
test "fail fast does not interrupt run errors or skips" do
fail_fast = Rails::TestUnitReporter.new @output, fail_fast: true
fail_fast.record(errored_test)
assert_no_match 'Failed tests:', @output.string
fail_fast.record(skipped_test)
assert_no_match 'Failed tests:', @output.string
end
private
def assert_rerun_snippet_count(snippet_count)
assert_equal snippet_count, @output.string.scan(%r{^bin/rails test }).size
end
def failed_test
ft = ExampleTest.new(:woot)
ft.failures << begin
raise Minitest::Assertion, "boo"
rescue Minitest::Assertion => e
e
end
ft
end
def errored_test
et = ExampleTest.new(:woot)
et.failures << Minitest::UnexpectedError.new(ArgumentError.new("wups"))
et
end
def passing_test
ExampleTest.new(:woot)
end
def skipped_test
st = ExampleTest.new(:woot)
st.failures << begin
raise Minitest::Skip, "skipchurches, misstemples"
rescue Minitest::Assertion => e
e
end
st
end
end