# Share a Minitest Report — Ruby Runs as a Page, Not a Paste

Canonical: https://commareports.com/share-minitest-report
Published: 2026-09-15

> minitest-reporters writes a real HTML report from a Ruby suite. Publish it to Comma and the run becomes a link with anchored comments and a revision per run.

# Share a Minitest report

Rails ships Minitest, which means a very large number of Ruby suites produce
exactly one artifact: a line of dots and, if you are lucky, a backtrace. Fine
for the person who typed `rails test`. Useless for everyone else.

The `minitest-reporters` gem has written HTML this whole time.

## Register the HTML reporter

```ruby
# Gemfile
gem "minitest-reporters", group: :test
```

```ruby
# test/test_helper.rb
require "minitest/reporters"

Minitest::Reporters.use! [
  Minitest::Reporters::ProgressReporter.new,
  Minitest::Reporters::HtmlReporter.new(reports_dir: "test/reports"),
]
```

Keep the progress reporter for the terminal; the HTML reporter is for
everyone who isn't at that terminal.

```bash
bin/rails test || true
# → test/reports/index.html
```

## Publish it

Drag `test/reports/index.html` into [the app](https://commareports.com/), or
from CI:

```bash
curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html test/reports/index.html \
        --arg title "Minitest — $GITHUB_REF_NAME" '{title: $title, html: $html}')"
```

One id per suite, PATCHed every run, `if: always()` so failures publish.

## Or JUnit, if something downstream wants XML

```ruby
Minitest::Reporters.use! Minitest::Reporters::JUnitReporter.new
```

Then convert with `junit2html` if you still want the page. Same destination,
one more hop — worth it only when another tool in the pipeline already
consumes the XML.

## What the link adds

- **Anchored threads** on a specific failure, so "this is the fixture, not the
  code" is recorded next to the test. See
  [commenting on HTML](/comment-on-html).
- **Revisions** per run, which turns flake arguments into a diff.
- **Access per report** — private, team, domain-gated, or named reviewers. See
  the [sharing model](/docs/sharing).

## Limits

- **Entry HTML: 5 MB.** Assets: 25 MB per file, 250 MB and 500 files total.
- **60 requests/minute per token.**

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision
history.

**[Publish a test report →](https://commareports.com/)**

### Related

- [Share an RSpec report](/share-rspec-report) · [Share a SimpleCov report](/share-simplecov-report)
- [Share a RuboCop report](/share-rubocop-report) · [Share a Brakeman report](/share-brakeman-report)
- [Share a JUnit report](/share-junit-report) · [Publish from CI](/docs/ci)
