Skip to content

Commit 38c61bb

Browse files
authored
Merge pull request rails#50984 from Shopify/test-unit-reporter-prerecord
Implement `Rails::TestUnitReporter#prerecord`
2 parents 86e260b + 932af45 commit 38c61bb

File tree

2 files changed

+43
-32
lines changed

2 files changed

+43
-32
lines changed

railties/lib/rails/test_unit/reporter.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ class TestUnitReporter < Minitest::StatisticsReporter
88
class_attribute :app_root
99
class_attribute :executable, default: "bin/rails test"
1010

11+
def prerecord(test_class, test_name)
12+
super
13+
if options[:verbose]
14+
io.print "%s#%s = " % [test_class.name, test_name]
15+
end
16+
end
17+
1118
def record(result)
1219
super
1320

@@ -69,8 +76,7 @@ def fail_fast?
6976
end
7077

7178
def format_line(result)
72-
klass = result.respond_to?(:klass) ? result.klass : result.class
73-
"%s#%s = %.2f s = %s" % [klass, result.name, result.time, result.result_code]
79+
"%.2f s = %s" % [result.time, result.result_code]
7480
end
7581

7682
def format_rerun_snippet(result)

railties/test/test_unit/reporter_test.rb

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,34 @@ def woot; end
1515
end
1616

1717
test "prints rerun snippet to run a single failed test" do
18-
@reporter.record(failed_test)
18+
record(failed_test)
1919
@reporter.report
2020

2121
assert_match %r{^bin/rails test .*test/test_unit/reporter_test\.rb:\d+$}, @output.string
2222
assert_rerun_snippet_count 1
2323
end
2424

2525
test "prints rerun snippet for every failed test" do
26-
@reporter.record(failed_test)
27-
@reporter.record(failed_test)
28-
@reporter.record(failed_test)
26+
record(failed_test)
27+
record(failed_test)
28+
record(failed_test)
2929
@reporter.report
3030

3131
assert_rerun_snippet_count 3
3232
end
3333

3434
test "does not print snippet for successful and skipped tests" do
35-
@reporter.record(passing_test)
36-
@reporter.record(skipped_test)
35+
record(passing_test)
36+
record(skipped_test)
3737
@reporter.report
3838
assert_no_match "Failed tests:", @output.string
3939
assert_rerun_snippet_count 0
4040
end
4141

4242
test "prints rerun snippet for skipped tests if run in verbose mode" do
43-
verbose = Rails::TestUnitReporter.new @output, verbose: true
44-
verbose.record(skipped_test)
45-
verbose.report
43+
@reporter = Rails::TestUnitReporter.new @output, verbose: true
44+
record(skipped_test)
45+
@reporter.report
4646

4747
assert_rerun_snippet_count 1
4848
end
@@ -51,7 +51,7 @@ def woot; end
5151
original_executable = Rails::TestUnitReporter.executable
5252
begin
5353
Rails::TestUnitReporter.executable = "bin/test"
54-
@reporter.record(failed_test)
54+
record(failed_test)
5555
@reporter.report
5656

5757
assert_match %r{^bin/test .*test/test_unit/reporter_test\.rb:\d+$}, @output.string
@@ -61,44 +61,44 @@ def woot; end
6161
end
6262

6363
test "outputs failures inline" do
64-
@reporter.record(failed_test)
64+
record(failed_test)
6565
@reporter.report
6666

6767
expect = %r{\AF\n\nFailure:\nTestUnitReporterTest::ExampleTest#woot \[[^\]]+\]:\nboo\n\nbin/rails test test/test_unit/reporter_test\.rb:\d+\n\n\z}
6868
assert_match expect, @output.string
6969
end
7070

7171
test "outputs errors inline" do
72-
@reporter.record(errored_test)
72+
record(errored_test)
7373
@reporter.report
7474

7575
expect = %r{\AE\n\nError:\nTestUnitReporterTest::ExampleTest#woot:\nArgumentError: wups\n some_test.rb:4\n\nbin/rails test .*test/test_unit/reporter_test\.rb:\d+\n\n\z}
7676
assert_match expect, @output.string
7777
end
7878

7979
test "outputs skipped tests inline if verbose" do
80-
verbose = Rails::TestUnitReporter.new @output, verbose: true, output_inline: true
81-
verbose.record(skipped_test)
82-
verbose.report
80+
@reporter = Rails::TestUnitReporter.new @output, verbose: true, output_inline: true
81+
record(skipped_test)
82+
@reporter.report
8383

8484
expect = %r{\ATestUnitReporterTest::ExampleTest#woot = 10\.00 s = S\n\n\nSkipped:\nTestUnitReporterTest::ExampleTest#woot \[[^\]]+\]:\nskipchurches, misstemples\n\nbin/rails test test/test_unit/reporter_test\.rb:\d+\n\n\z}
8585
assert_match expect, @output.string
8686
end
8787

8888
test "does not output rerun snippets after run" do
89-
@reporter.record(failed_test)
89+
record(failed_test)
9090
@reporter.report
9191

9292
assert_no_match "Failed tests:", @output.string
9393
end
9494

9595
test "fail fast interrupts run on failure" do
96-
fail_fast = Rails::TestUnitReporter.new @output, fail_fast: true
96+
@reporter = Rails::TestUnitReporter.new @output, fail_fast: true
9797
interrupt_raised = false
9898

9999
# Minitest passes through Interrupt, catch it manually.
100100
begin
101-
fail_fast.record(failed_test)
101+
record(failed_test)
102102
rescue Interrupt
103103
interrupt_raised = true
104104
ensure
@@ -107,12 +107,12 @@ def woot; end
107107
end
108108

109109
test "fail fast interrupts run on error" do
110-
fail_fast = Rails::TestUnitReporter.new @output, fail_fast: true
110+
@reporter = Rails::TestUnitReporter.new @output, fail_fast: true
111111
interrupt_raised = false
112112

113113
# Minitest passes through Interrupt, catch it manually.
114114
begin
115-
fail_fast.record(errored_test)
115+
record(errored_test)
116116
rescue Interrupt
117117
interrupt_raised = true
118118
ensure
@@ -121,16 +121,16 @@ def woot; end
121121
end
122122

123123
test "fail fast does not interrupt run skips" do
124-
fail_fast = Rails::TestUnitReporter.new @output, fail_fast: true
124+
@reporter = Rails::TestUnitReporter.new @output, fail_fast: true
125125

126-
fail_fast.record(skipped_test)
126+
record(skipped_test)
127127
assert_no_match "Failed tests:", @output.string
128128
end
129129

130130
test "outputs colored passing results" do
131131
@output.stub(:tty?, true) do
132-
colored = Rails::TestUnitReporter.new @output, color: true, output_inline: true
133-
colored.record(passing_test)
132+
@reporter = Rails::TestUnitReporter.new @output, color: true, output_inline: true
133+
record(passing_test)
134134

135135
expect = %r{\e\[32m\.\e\[0m}
136136
assert_match expect, @output.string
@@ -139,8 +139,8 @@ def woot; end
139139

140140
test "outputs colored skipped results" do
141141
@output.stub(:tty?, true) do
142-
colored = Rails::TestUnitReporter.new @output, color: true, output_inline: true
143-
colored.record(skipped_test)
142+
@reporter = Rails::TestUnitReporter.new @output, color: true, output_inline: true
143+
record(skipped_test)
144144

145145
expect = %r{\e\[33mS\e\[0m}
146146
assert_match expect, @output.string
@@ -149,8 +149,8 @@ def woot; end
149149

150150
test "outputs colored failed results" do
151151
@output.stub(:tty?, true) do
152-
colored = Rails::TestUnitReporter.new @output, color: true, output_inline: true
153-
colored.record(failed_test)
152+
@reporter = Rails::TestUnitReporter.new @output, color: true, output_inline: true
153+
record(failed_test)
154154

155155
expected = %r{\e\[31mF\e\[0m\n\n\e\[31mFailure:\nTestUnitReporterTest::ExampleTest#woot \[test/test_unit/reporter_test.rb:\d+\]:\nboo\n\e\[0m\n\nbin/rails test .*test/test_unit/reporter_test.rb:\d+\n\n}
156156
assert_match expected, @output.string
@@ -159,15 +159,20 @@ def woot; end
159159

160160
test "outputs colored error results" do
161161
@output.stub(:tty?, true) do
162-
colored = Rails::TestUnitReporter.new @output, color: true, output_inline: true
163-
colored.record(errored_test)
162+
@reporter = Rails::TestUnitReporter.new @output, color: true, output_inline: true
163+
record(errored_test)
164164

165165
expected = %r{\e\[31mE\e\[0m\n\n\e\[31mError:\nTestUnitReporterTest::ExampleTest#woot:\nArgumentError: wups\n some_test.rb:4\n\e\[0m}
166166
assert_match expected, @output.string
167167
end
168168
end
169169

170170
private
171+
def record(test_result)
172+
@reporter.prerecord(test_result.klass.constantize, test_result.name)
173+
@reporter.record(test_result)
174+
end
175+
171176
def assert_rerun_snippet_count(snippet_count)
172177
assert_equal snippet_count, @output.string.scan(%r{^bin/rails test }).size
173178
end

0 commit comments

Comments
 (0)