Skip to content

Conversation

@shawn-shellenbarger
Copy link
Contributor

@shawn-shellenbarger shawn-shellenbarger commented Sep 1, 2025

The output of the test summaries through minitest-queue report and rspec-queue report makes it difficult to quickly parse which test files are failing in CI. These changes include a summary at the top of each report of which tests failed before dumping the entire report.

I've also added backtrace filtering for rspec to remove noisy filepaths that bloat backtraces.

The examples below are for rspec and are intended to highlight the difference in the structure of the output. The backtrace filters weren't applied when I generated these.

Output before changes

Waiting for workers to complete
12 errors found

  Calculator#add handles negative numbers
  Failure/Error: expect(calc.add(2, -3)).to eq(0)

    expected: 0
         got: -1

    (compared using ==)
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:38:in `handle_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/calculator_spec.rb:28:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/calculator_spec.rb:26 # Calculator#add handles negative numbers

  Calculator#divide handles division by zero
  Failure/Error: a / b  # Bug: no zero check

  ZeroDivisionError:
    divided by 0
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/calculator_spec.rb:9:in `/'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/calculator_spec.rb:9:in `divide'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/calculator_spec.rb:39:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/calculator_spec.rb:37 # Calculator#divide handles division by zero

  Calculator complex expectations has multiple failing expectations
  Failure/Error: expect(calc.add(1, 1)).to eq(3)  # Fails

    expected: 3
         got: 2

    (compared using ==)
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:38:in `handle_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/calculator_spec.rb:56:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/calculator_spec.rb:55 # Calculator complex expectations has multiple failing expectations

  Product basic product operations checks if product is in stock
  Failure/Error: expect(empty_product.in_stock?).to be true

    expected true
         got false
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:40:in `handle_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:41:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/product_spec.rb:36 # Product basic product operations checks if product is in stock

  Product#apply_discount applies discount correctly
  Failure/Error: expect(product.price).to eq(75)

    expected: 75
         got: 80.0

    (compared using ==)
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:38:in `handle_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:50:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/product_spec.rb:46 # Product#apply_discount applies discount correctly

  Product#sell raises error when overselling
  Failure/Error: raise "Insufficient inventory" if quantity > inventory

  RuntimeError:
    Insufficient inventory
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:21:in `sell'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:70:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/product_spec.rb:68 # Product#sell raises error when overselling

  Product#sell handles nil quantity
  Failure/Error: raise "Insufficient inventory" if quantity > inventory

  NoMethodError:
    undefined method `>' for nil
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:21:in `sell'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:76:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/product_spec.rb:74 # Product#sell handles nil quantity

  Product edge cases creates product with nil name
  Failure/Error: expect(product.name.upcase).to eq('NIL')

  NoMethodError:
    undefined method `upcase' for nil
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:84:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/product_spec.rb:81 # Product edge cases creates product with nil name

  User#valid? returns false when name is missing
  Failure/Error: expect(user.valid?).to eq(true)

    expected: true
         got: false

    (compared using ==)

    Diff:
    @@ -1 +1 @@
    -true
    +false
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:38:in `handle_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/user_spec.rb:30:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/user_spec.rb:27 # User#valid? returns false when name is missing

  User#admin? returns true for admin users
  Failure/Error: expect(user.admin?).to eq(true)

    expected: true
         got: false

    (compared using ==)

    Diff:
    @@ -1 +1 @@
    -true
    +false
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:38:in `handle_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/user_spec.rb:38:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/user_spec.rb:35 # User#admin? returns true for admin users

  User error scenarios raises an error when accessing undefined method
  Failure/Error: user.undefined_method

  NoMethodError:
    undefined method `undefined_method' for an instance of User
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/user_spec.rb:46:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/user_spec.rb:43 # User error scenarios raises an error when accessing undefined method

  User error scenarios handles nil operations
  Failure/Error: nil.upcase

  NoMethodError:
    undefined method `upcase' for nil
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/user_spec.rb:51:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:262:in `run'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:399:in `block (3 levels) in run_specs'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/ci/queue/redis/worker.rb:59:in `poll'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:398:in `block (2 levels) in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:396:in `block in run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/lib/rspec/queue.rb:391:in `run_specs'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/exe/rspec-queue:5:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/rspec-queue:25:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
  # /Users/shawn/.gem/ruby/3.3.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `load'
  # /Users/shawn/.gem/ruby/3.3.0/bin/bundle:25:in `<main>'
  # 
  #   Showing full backtrace because every line was filtered out.
  #   See docs for RSpec::Configuration#backtrace_exclusion_patterns and
  #   RSpec::Configuration#backtrace_inclusion_patterns for more information.

rspec ./test/fixtures/rspec_examples/user_spec.rb:49 # User error scenarios handles nil operations

Output after changes

Waiting for workers to complete
12 errors found

================================================================================
FAILED TESTS SUMMARY:
================================================================================
  ./test/fixtures/rspec_examples/calculator_spec.rb (3 failures)
  ./test/fixtures/rspec_examples/product_spec.rb (5 failures)
  ./test/fixtures/rspec_examples/user_spec.rb (4 failures)
================================================================================

--------------------------------------------------------------------------------
Error 1 of 12
--------------------------------------------------------------------------------

  Calculator#add handles negative numbers
  Failure/Error: expect(calc.add(2, -3)).to eq(0)

    expected: 0
         got: -1

    (compared using ==)
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 2 of 12
--------------------------------------------------------------------------------

  Calculator#divide handles division by zero
  Failure/Error: a / b  # Bug: no zero check

  ZeroDivisionError:
    divided by 0
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/calculator_spec.rb:9:in `/'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/calculator_spec.rb:9:in `divide'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/calculator_spec.rb:39:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 3 of 12
--------------------------------------------------------------------------------

  Calculator complex expectations has multiple failing expectations
  Failure/Error: expect(calc.add(1, 1)).to eq(3)  # Fails

    expected: 3
         got: 2

    (compared using ==)
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 4 of 12
--------------------------------------------------------------------------------

  Product basic product operations checks if product is in stock
  Failure/Error: expect(empty_product.in_stock?).to be true

    expected true
         got false
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:40:in `handle_failure'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 5 of 12
--------------------------------------------------------------------------------

  Product#apply_discount applies discount correctly
  Failure/Error: expect(product.price).to eq(75)

    expected: 75
         got: 80.0

    (compared using ==)
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in <module:Support>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 6 of 12
--------------------------------------------------------------------------------

  Product#sell raises error when overselling
  Failure/Error: raise "Insufficient inventory" if quantity > inventory

  RuntimeError:
    Insufficient inventory
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:21:in `sell'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:70:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 7 of 12
--------------------------------------------------------------------------------

  Product#sell handles nil quantity
  Failure/Error: raise "Insufficient inventory" if quantity > inventory

  NoMethodError:
    undefined method `>' for nil
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:21:in `sell'
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:76:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 8 of 12
--------------------------------------------------------------------------------

  Product edge cases creates product with nil name
  Failure/Error: expect(product.name.upcase).to eq('NIL')

  NoMethodError:
    undefined method `upcase' for nil
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/product_spec.rb:84:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 9 of 12
--------------------------------------------------------------------------------

  User#valid? returns false when name is missing
  Failure/Error: expect(user.valid?).to eq(true)

    expected: true
         got: false

    (compared using ==)

    Diff:

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 10 of 12
--------------------------------------------------------------------------------

  User#admin? returns true for admin users
  Failure/Error: expect(user.admin?).to eq(true)

    expected: true
         got: false

    (compared using ==)

    Diff:

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 11 of 12
--------------------------------------------------------------------------------

  User error scenarios raises an error when accessing undefined method
  Failure/Error: user.undefined_method

  NoMethodError:
    undefined method `undefined_method' for an instance of User
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/user_spec.rb:46:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'

[... Truncated due to GitHub PR description length limit ...]

--------------------------------------------------------------------------------
Error 12 of 12
--------------------------------------------------------------------------------

  User error scenarios handles nil operations
  Failure/Error: nil.upcase

  NoMethodError:
    undefined method `upcase' for nil
  # /Users/shawn/src/github.com/Shopify/ci-queue/ruby/test/fixtures/rspec_examples/user_spec.rb:51:in `block (3 levels) in <top (required)>'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `instance_exec'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run'
  # /Users/shawn/.gem/ruby/3.3.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'

[... Truncated due to GitHub PR description length limit ...]
================================================================================

@shawn-shellenbarger shawn-shellenbarger changed the title Ss rspec report Improve rspec-queue --report output Sep 1, 2025
@shawn-shellenbarger shawn-shellenbarger force-pushed the ss-rspec-report branch 2 times, most recently from 25ad547 to 505a7cb Compare September 1, 2025 22:45
@shawn-shellenbarger shawn-shellenbarger marked this pull request as ready for review September 2, 2025 16:27
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR improves the readability of RSpec test failure reports by adding a summary section that lists failing test files at the top, followed by detailed error information. This addresses the problem where parsing failed tests in CI was difficult due to verbose output without a clear overview.

  • Adds a "FAILED TESTS SUMMARY" section showing files with failure counts
  • Reorganizes output to show summary first, then detailed errors
  • Formats detailed errors with numbered sections and clear separators

Reviewed Changes

Copilot reviewed 2 out of 3 changed files in this pull request and generated 2 comments.

File Description
ruby/lib/rspec/queue.rb Main implementation that adds summary formatting and reorganizes error output display
ruby/test/integration/rspec_redis_test.rb Updates test expectations to match the new formatted output structure

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

errors.each do |error_output|
# Look for the rspec rerun command (should always be present thanks to BuildStatusRecorder)
# The rspec command appears on its own line, possibly after whitespace
if match = error_output.match(/^\s*rspec\s+([^\s]+)(?::\d+)?/m)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be handled by a backtrace filter?

backtrace = Minitest.filter_backtrace(error.backtrace).map { |line| ' ' + relativize(line) }

RSpec.configuration.backtrace_formatter.filter_gem('ci-queue')

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was being used to grab the file name to use in the toplevel summary, not to actually filter anything from the backtrace.

E.g.

================================================================================
FAILED TESTS SUMMARY:
================================================================================
  ./test/fixtures/rspec_examples/calculator_spec.rb (3 failures)
  ./test/fixtures/rspec_examples/product_spec.rb (5 failures)
  ./test/fixtures/rspec_examples/user_spec.rb (4 failures)
================================================================================

I refactored the parsing to follow what is being done for minitest instead of relying on pattern matching.


After looking into the backtrace cleaner, I did go ahead and add some specific filtering to our backtraces because they are often truncated.

Warning: This log has exceeded the 2 MB display limit. Below we are only showing the last 2 MB of output.

Here is an example build for reference and the patterns I chose to filter


private

def colorized_rerun_command(example, colorizer=::RSpec::Core::Formatters::ConsoleCodes)
Copy link
Contributor Author

@shawn-shellenbarger shawn-shellenbarger Sep 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved into failure_formatter.rb

Comment on lines +17 to +20
@notification.fully_formatted(nil),
colorized_rerun_command(@notification.example)
].join("\n")
end
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here is a breakdown from an existing build on where these are located

@shawn-shellenbarger shawn-shellenbarger force-pushed the ss-rspec-report branch 2 times, most recently from f4d2fcd to 8e8337a Compare September 6, 2025 19:36
@shawn-shellenbarger shawn-shellenbarger changed the title Improve rspec-queue --report output Improve test summary output for rspec and minitest Sep 6, 2025
@ChrisBr ChrisBr merged commit de58d21 into main Sep 29, 2025
14 of 24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants