From 896ec73b1e43e79dfff2f7ee71ffc8b4a256185e Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 13:39:46 -0500 Subject: [PATCH 01/10] Update default gem usage for Ruby 3.4, fixes #5197 --- graphql.gemspec | 1 + lib/graphql/subscriptions/serialize.rb | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/graphql.gemspec b/graphql.gemspec index 88754f5b97..c4263f29c7 100644 --- a/graphql.gemspec +++ b/graphql.gemspec @@ -27,6 +27,7 @@ Gem::Specification.new do |s| s.add_runtime_dependency "base64" s.add_runtime_dependency "fiber-storage" + s.add_runtime_dependency "logger" s.add_development_dependency "benchmark-ips" s.add_development_dependency "concurrent-ruby", "~>1.0" diff --git a/lib/graphql/subscriptions/serialize.rb b/lib/graphql/subscriptions/serialize.rb index f58f282b72..6b1d91becf 100644 --- a/lib/graphql/subscriptions/serialize.rb +++ b/lib/graphql/subscriptions/serialize.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true require "set" -require "ostruct" - module GraphQL class Subscriptions # Serialization helpers for passing subscription data around. @@ -148,7 +146,7 @@ def dump_value(obj) elsif obj.is_a?(Date) || obj.is_a?(Time) # DateTime extends Date; for TimeWithZone, call `.utc` first. { TIMESTAMP_KEY => [obj.class.name, obj.strftime(TIMESTAMP_FORMAT)] } - elsif obj.is_a?(OpenStruct) + elsif defined?(OpenStruct) && obj.is_a?(OpenStruct) { OPEN_STRUCT_KEY => dump_value(obj.to_h) } elsif defined?(ActiveRecord::Relation) && obj.is_a?(ActiveRecord::Relation) dump_value(obj.to_a) From acef47ad277820f8fdd54cf140d2343b9ff5caf6 Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 13:40:24 -0500 Subject: [PATCH 02/10] Add regression test for no warnings on load --- spec/graphql_spec.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 spec/graphql_spec.rb diff --git a/spec/graphql_spec.rb b/spec/graphql_spec.rb new file mode 100644 index 0000000000..23b29f04d5 --- /dev/null +++ b/spec/graphql_spec.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +require "spec_helper" +require "open3" + +describe GraphQL do + it "loads without warnings" do + stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile { gem('graphql', path: './') }; GraphQL.eager_load!"|) + puts stderr_and_stdout + assert_equal "", stderr_and_stdout + end +end From 235e476e49d6d44c860bf663a188eb7adf67651c Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 13:47:17 -0500 Subject: [PATCH 03/10] Add missing gem, run 3.4 on CI --- .github/workflows/ci.yaml | 10 +++++----- spec/graphql_spec.rb | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index c03871372d..4255d17223 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -9,7 +9,7 @@ jobs: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: - ruby-version: 3.3 + ruby-version: 3.4 bundler-cache: true - run: bundle exec rake rubocop system_tests: @@ -18,12 +18,12 @@ jobs: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: - ruby-version: 3.3 + ruby-version: 3.4 bundler-cache: true - run: bundle exec rake compile - uses: ruby/setup-ruby@v1 with: - ruby-version: 3.3 + ruby-version: 3.4 bundler-cache: true env: BUNDLE_GEMFILE: ./spec/dummy/Gemfile @@ -43,7 +43,7 @@ jobs: matrix: include: - gemfile: Gemfile - ruby: 3.2 + ruby: 3.4 - gemfile: Gemfile ruby: 2.7 # lowest supported version - gemfile: gemfiles/rails_7.0.gemfile @@ -58,7 +58,7 @@ jobs: ruby: 3.3 graphql_reject_numbers_followed_by_names: 1 - gemfile: gemfiles/rails_master.gemfile - ruby: 3.3 + ruby: 3.4 graphql_reject_numbers_followed_by_names: 1 isolation_level_fiber: 1 runs-on: ubuntu-latest diff --git a/spec/graphql_spec.rb b/spec/graphql_spec.rb index 23b29f04d5..a6dc00ac72 100644 --- a/spec/graphql_spec.rb +++ b/spec/graphql_spec.rb @@ -4,7 +4,7 @@ describe GraphQL do it "loads without warnings" do - stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile { gem('graphql', path: './') }; GraphQL.eager_load!"|) + stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile { gem('fiber-storage'); gem('graphql', path: './') }; GraphQL.eager_load!"|) puts stderr_and_stdout assert_equal "", stderr_and_stdout end From 9631a2de2ffa285a542b43aed4a5ebf870f67f56 Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 13:53:10 -0500 Subject: [PATCH 04/10] Inline gemfile improvements --- spec/graphql_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/graphql_spec.rb b/spec/graphql_spec.rb index a6dc00ac72..0a8fc7dc26 100644 --- a/spec/graphql_spec.rb +++ b/spec/graphql_spec.rb @@ -4,7 +4,7 @@ describe GraphQL do it "loads without warnings" do - stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile { gem('fiber-storage'); gem('graphql', path: './') }; GraphQL.eager_load!"|) + stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile(true) { source("https://rubygems.org"); gem('fiber-storage'); gem('graphql', path: './') }; GraphQL.eager_load!"|) puts stderr_and_stdout assert_equal "", stderr_and_stdout end From 3d1657fe3c2e1740238e413e6b15323b4802ef79 Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 13:56:16 -0500 Subject: [PATCH 05/10] Fix quotes --- spec/graphql_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/graphql_spec.rb b/spec/graphql_spec.rb index 0a8fc7dc26..5f92e18244 100644 --- a/spec/graphql_spec.rb +++ b/spec/graphql_spec.rb @@ -4,7 +4,7 @@ describe GraphQL do it "loads without warnings" do - stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile(true) { source("https://rubygems.org"); gem('fiber-storage'); gem('graphql', path: './') }; GraphQL.eager_load!"|) + stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile(true) { source('https://rubygems.org'); gem('fiber-storage'); gem('graphql', path: './') }; GraphQL.eager_load!"|) puts stderr_and_stdout assert_equal "", stderr_and_stdout end From 27d4fcb51083f5f19fc957f452f3147534fd46c9 Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 14:03:51 -0500 Subject: [PATCH 06/10] Silence bundler logging --- spec/graphql_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/graphql_spec.rb b/spec/graphql_spec.rb index 5f92e18244..5be3f24b4e 100644 --- a/spec/graphql_spec.rb +++ b/spec/graphql_spec.rb @@ -4,7 +4,7 @@ describe GraphQL do it "loads without warnings" do - stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile(true) { source('https://rubygems.org'); gem('fiber-storage'); gem('graphql', path: './') }; GraphQL.eager_load!"|) + stderr_and_stdout, _status = Open3.capture2e(%|ruby -Ilib -e "require 'bundler/inline'; gemfile(true, quiet: true) { source('https://rubygems.org'); gem('fiber-storage'); gem('graphql', path: './') }; GraphQL.eager_load!"|) puts stderr_and_stdout assert_equal "", stderr_and_stdout end From 64906c79d1c056adb0a89a355c6f91fba67620bc Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 14:34:57 -0500 Subject: [PATCH 07/10] Update lots of assertions for new inspect and backtrace formatting --- spec/graphql/backtrace_spec.rb | 31 ++++++++++++++------- spec/graphql/execution/errors_spec.rb | 2 +- spec/graphql/pagination/connections_spec.rb | 4 ++- spec/graphql/schema/argument_spec.rb | 20 ++++++------- spec/graphql/schema/input_object_spec.rb | 9 ++++-- spec/graphql/schema/mutation_spec.rb | 3 +- 6 files changed, 43 insertions(+), 26 deletions(-) diff --git a/spec/graphql/backtrace_spec.rb b/spec/graphql/backtrace_spec.rb index d5b137d971..bb7b3ffbce 100644 --- a/spec/graphql/backtrace_spec.rb +++ b/spec/graphql/backtrace_spec.rb @@ -137,12 +137,13 @@ def execute_multiplex(multiplex:) ] assert_equal expected_graphql_backtrace, err.graphql_backtrace + hash_inspect = { message: "Boom" }.inspect # The message includes the GraphQL context rendered_table = [ - 'Loc | Field | Object | Arguments | Result', - '3:13 | Thing.raiseField as boomError | :something | {:message=>"Boom"} | #', - '2:11 | Query.field1 | "Root" | {} | {}', - '1:9 | query | "Root" | {"msg"=>"Boom"} | {field1: {...}}', + 'Loc | Field | Object | ' + "Arguments".ljust(hash_inspect.size) + ' | Result', + '3:13 | Thing.raiseField as boomError | :something | ' + hash_inspect + ' | #', + '2:11 | Query.field1 | "Root" | ' + "{}".ljust(hash_inspect.size) + ' | {}', + '1:9 | query | "Root" | ' + {"msg" => "Boom"}.inspect.ljust(hash_inspect.size) + ' | {field1: {...}}', ].join("\n") assert_includes err.message, "\n" + rendered_table @@ -201,14 +202,18 @@ def execute_multiplex(multiplex:) backtrace_schema.execute("query { nilInspect { raiseField(message: \"pop!\") } }") } + hash_inspect = {message: "pop!"}.inspect # `=>` on Ruby < 3.4 rendered_table = [ - 'Loc | Field | Object | Arguments | Result', - '1:22 | Thing.raiseField | | {:message=>"pop!"} | #', - '1:9 | Query.nilInspect | nil | {} | {}', - '1:1 | query | nil | {} | {nilInspect: {...}}', + 'Loc | Field | Object | ' + "Arguments".ljust(hash_inspect.size) + ' | Result', + '1:22 | Thing.raiseField | | ' + hash_inspect + ' | #', + '1:9 | Query.nilInspect | nil | ' + "{}".ljust(hash_inspect.size) + ' | {}', + '1:1 | query | nil | ' + "{}".ljust(hash_inspect.size) + ' | {nilInspect: {...}}', + '', + '' ].join("\n") - assert_includes(err.message, rendered_table) + table = err.message.split("GraphQL Backtrace:\n").last + assert_equal rendered_table, table end it "raises original exception instead of a TracedError when error does not occur during resolving" do @@ -225,7 +230,13 @@ def execute_multiplex(multiplex:) # This will get brittle when execution code moves between files # but I'm not sure how to be sure that the backtrace contains the right stuff! def assert_backtrace_includes(backtrace, file:, method:) - includes_tag = backtrace.any? { |s| s.include?(file) && s.include?("`" + method) } + includes_tag = if RUBY_VERSION < "3.4" + backtrace.any? { |s| s.include?(file) && s.include?("`" + method) } + elsif method == "block" + backtrace.any? { |s| s.include?(file) && s.include?("'block") } + else + backtrace.any? { |s| s.include?(file) && s.include?("#{method}'") } + end assert includes_tag, "Backtrace should include #{file} inside method #{method}\n\n#{backtrace.join("\n")}" end diff --git a/spec/graphql/execution/errors_spec.rb b/spec/graphql/execution/errors_spec.rb index 6a2a1d26e2..270cc483e9 100644 --- a/spec/graphql/execution/errors_spec.rb +++ b/spec/graphql/execution/errors_spec.rb @@ -202,7 +202,7 @@ def non_nullable_array ctx = { errors: [] } res = ErrorsTestSchema.execute "{ f1(a1: 1) }", context: ctx, root_value: :abc assert_equal({ "data" => { "f1" => nil } }, res) - assert_equal ["f1 broke (ErrorsTestSchema::Query.f1, :abc, {:a1=>1})"], ctx[:errors] + assert_equal ["f1 broke (ErrorsTestSchema::Query.f1, :abc, #{{a1: 1}.inspect})"], ctx[:errors] end it "rescues errors from lazy code" do diff --git a/spec/graphql/pagination/connections_spec.rb b/spec/graphql/pagination/connections_spec.rb index cd2d57e7d2..c9c9031536 100644 --- a/spec/graphql/pagination/connections_spec.rb +++ b/spec/graphql/pagination/connections_spec.rb @@ -117,7 +117,9 @@ def things2 ConnectionErrorTestSchema.execute("{ things2 { name } }") end - expected_message = if RUBY_VERSION >= "3.3" + expected_message = if RUBY_VERSION >= "3.4" + "undefined method 'no_such_method' for an instance of ConnectionErrorTestSchema::BadThing" + elsif RUBY_VERSION >= "3.3" "undefined method `no_such_method' for an instance of ConnectionErrorTestSchema::BadThing" else "undefined method `no_such_method' for " diff --git a/spec/graphql/schema/argument_spec.rb b/spec/graphql/schema/argument_spec.rb index 43af56a348..b156c1cbe5 100644 --- a/spec/graphql/schema/argument_spec.rb +++ b/spec/graphql/schema/argument_spec.rb @@ -174,7 +174,7 @@ def self.resolve_type(type, obj, ctx) res = SchemaArgumentTest::Schema.execute(query_str) # Make sure it's getting the renamed symbol: - assert_equal '{:renamed=>"x", :required_with_default_arg=>1}', res["data"]["field"] + assert_equal({renamed: "x", required_with_default_arg: 1}.inspect, res["data"]["field"]) end end @@ -186,7 +186,7 @@ def self.resolve_type(type, obj, ctx) res = SchemaArgumentTest::Schema.execute(query_str, context: {multiply_by: 3}) # Make sure it's getting the renamed symbol: - assert_equal '{:prepared_arg=>15, :required_with_default_arg=>1}', res["data"]["field"] + assert_equal({ prepared_arg: 15, required_with_default_arg: 1}.inspect, res["data"]["field"]) end it "calls the method on the provided Proc" do @@ -196,7 +196,7 @@ def self.resolve_type(type, obj, ctx) res = SchemaArgumentTest::Schema.execute(query_str, context: {multiply_by: 3}) # Make sure it's getting the renamed symbol: - assert_equal '{:prepared_by_proc_arg=>15, :required_with_default_arg=>1}', res["data"]["field"] + assert_equal({prepared_by_proc_arg: 15, required_with_default_arg: 1 }.inspect, res["data"]["field"]) end it "calls the method on the provided callable object" do @@ -206,7 +206,7 @@ def self.resolve_type(type, obj, ctx) res = SchemaArgumentTest::Schema.execute(query_str, context: {multiply_by: 3}) # Make sure it's getting the renamed symbol: - assert_equal '{:prepared_by_callable_arg=>15, :required_with_default_arg=>1}', res["data"]["field"] + assert_equal({prepared_by_callable_arg: 15, required_with_default_arg: 1}.inspect, res["data"]["field"]) end it "handles exceptions raised by prepare" do @@ -215,7 +215,7 @@ def self.resolve_type(type, obj, ctx) GRAPHQL res = SchemaArgumentTest::Schema.execute(query_str, context: {multiply_by: 3}) - assert_equal({ 'f1' => '{:arg=>"echo", :required_with_default_arg=>1}', 'f2' => nil }, res['data']) + assert_equal({ 'f1' => {arg: "echo", required_with_default_arg: 1}.inspect, 'f2' => nil }, res['data']) assert_equal(res['errors'][0]['message'], 'boom!') assert_equal(res['errors'][0]['path'], ['f2']) end @@ -226,7 +226,7 @@ def self.resolve_type(type, obj, ctx) GRAPHQL res = SchemaArgumentTest::Schema.execute(query_str, context: {multiply_by: 3}) - assert_equal({ 'f1' => '{:arg=>"echo", :required_with_default_arg=>1}', 'f2' => nil }, res['data']) + assert_equal({ 'f1' => {arg: "echo", required_with_default_arg: 1}.inspect, 'f2' => nil }, res['data']) assert_nil(res['errors']) end end @@ -238,7 +238,7 @@ def self.resolve_type(type, obj, ctx) GRAPHQL res = SchemaArgumentTest::Schema.execute(query_str) - assert_equal '{:required_with_default_arg=>1}', res["data"]["field"] + assert_equal({required_with_default_arg: 1}.inspect, res["data"]["field"]) end it 'uses provided input value' do @@ -247,7 +247,7 @@ def self.resolve_type(type, obj, ctx) GRAPHQL res = SchemaArgumentTest::Schema.execute(query_str) - assert_equal '{:required_with_default_arg=>2}', res["data"]["field"] + assert_equal({ required_with_default_arg: 2 }.inspect, res["data"]["field"]) end it 'respects non-null type' do @@ -267,14 +267,14 @@ def self.resolve_type(type, obj, ctx) GRAPHQL res = SchemaArgumentTest::Schema.execute(query_str) - assert_equal "{:instrument=>#{Jazz::Models::Instrument.new("Drum Kit", "PERCUSSION").inspect}, :required_with_default_arg=>1}", res["data"]["field"] + assert_equal({instrument: Jazz::Models::Instrument.new("Drum Kit", "PERCUSSION"), required_with_default_arg: 1}.inspect, res["data"]["field"]) query_str2 = <<-GRAPHQL query { field(instrumentIds: ["Instrument/Organ"]) } GRAPHQL res = SchemaArgumentTest::Schema.execute(query_str2) - assert_equal "{:instruments=>[#{Jazz::Models::Instrument.new("Organ", "KEYS").inspect}], :required_with_default_arg=>1}", res["data"]["field"] + assert_equal({instruments: [Jazz::Models::Instrument.new("Organ", "KEYS")], required_with_default_arg: 1}.inspect, res["data"]["field"]) end it "returns nil when no ID is given and `required: false`" do diff --git a/spec/graphql/schema/input_object_spec.rb b/spec/graphql/schema/input_object_spec.rb index 4d922be713..e1c1bb8371 100644 --- a/spec/graphql/schema/input_object_spec.rb +++ b/spec/graphql/schema/input_object_spec.rb @@ -509,7 +509,8 @@ def self.object_from_id(id, _ctx) it "authorizes Hashes returned from prepare:" do query_str = "{ hashInput(input: { k1: 5, k2: 12 }) }" res = InputObjectPrepareObjectTest::Schema.execute(query_str) - assert_equal "Hash, {:k1=>5, :k2=>12}", res["data"]["hashInput"] + expected_str = { k1: 5, k2: 12 }.inspect + assert_equal "Hash, #{expected_str}", res["data"]["hashInput"] query_str = "{ hashInput(input: { k1: 500, k2: 12 }) }" res = InputObjectPrepareObjectTest::Schema.execute(query_str) @@ -685,14 +686,16 @@ def self.resolve_type(type, obj, ctx) it "handles camelized booleans" do res = Jazz::Schema.execute("query($input: CamelizedBooleanInput!){ inputObjectCamelization(input: $input) }", variables: { input: { camelizedBoolean: false } }) - assert_equal "{:camelized_boolean=>false}", res["data"]["inputObjectCamelization"] + expected_res = { camelized_boolean: false }.inspect + assert_equal expected_res, res["data"]["inputObjectCamelization"] end end describe "when used with default_value" do it "comes as an instance" do res = Jazz::Schema.execute("{ defaultValueTest }") - assert_equal "Jazz::InspectableInput -> {:string_value=>\"S\"}", res["data"]["defaultValueTest"] + expected_res = { string_value: "S" }.inspect + assert_equal "Jazz::InspectableInput -> #{expected_res}", res["data"]["defaultValueTest"] end it "works with empty objects" do diff --git a/spec/graphql/schema/mutation_spec.rb b/spec/graphql/schema/mutation_spec.rb index 9cafdf6ca2..d6a3111f42 100644 --- a/spec/graphql/schema/mutation_spec.rb +++ b/spec/graphql/schema/mutation_spec.rb @@ -256,7 +256,8 @@ def resolve(**inputs) assert_equal ["thingId", "thingName"], child_mutation.all_argument_definitions.map(&:graphql_name) assert_equal ["thingId", "thingName"], schema.mutation.fields["child"].all_argument_definitions.map(&:graphql_name) res = schema.execute("mutation { child(thingName: \"abc\", thingId: \"123\") { inputs } }") - assert_equal "{:thing_id=>\"123\", :thing_name=>\"abc\"}", res["data"]["child"]["inputs"] + expected_result = { thing_id: "123", thing_name: "abc" }.inspect + assert_equal expected_result, res["data"]["child"]["inputs"] end describe "flushing dataloader cache" do From b220f124c49e9ee9a1d91be2240ec608e15acbca Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 15:54:35 -0500 Subject: [PATCH 08/10] More output on CI --- spec/spec_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 380e8603d8..a25477c7c9 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -40,7 +40,7 @@ Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true) end -# Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new(color: true) +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new(color: true) Minitest::Spec.make_my_diffs_pretty! From 5954010f1bffd374bd0fc2b17e29b29d3d94ba4f Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 16:09:51 -0500 Subject: [PATCH 09/10] Remove evt from gh actions --- spec/graphql/dataloader/nonblocking_dataloader_spec.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/graphql/dataloader/nonblocking_dataloader_spec.rb b/spec/graphql/dataloader/nonblocking_dataloader_spec.rb index 3e3aec77dc..63bfc7f7a1 100644 --- a/spec/graphql/dataloader/nonblocking_dataloader_spec.rb +++ b/spec/graphql/dataloader/nonblocking_dataloader_spec.rb @@ -250,12 +250,12 @@ def self.included(child_class) let(:scheduler_class) { Libev::Scheduler } include NonblockingDataloaderAssertions end - end - describe "with evt" do - require "evt" - let(:scheduler_class) { Evt::Scheduler } - include NonblockingDataloaderAssertions + describe "with evt" do + require "evt" + let(:scheduler_class) { Evt::Scheduler } + include NonblockingDataloaderAssertions + end end end end From f19c356d958cbc7510965fc47426bc5c5326ae39 Mon Sep 17 00:00:00 2001 From: Robert Mosolgo Date: Fri, 3 Jan 2025 16:16:17 -0500 Subject: [PATCH 10/10] Fix test output --- spec/spec_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a25477c7c9..380e8603d8 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -40,7 +40,7 @@ Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true) end -Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new(color: true) +# Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new(color: true) Minitest::Spec.make_my_diffs_pretty!