Jest test reporting
Jest gives you a terminal summary and a --json results file —
but that’s a file, not a dashboard, and it’s gone next run. Qualflare
ingests your Jest results and turns them into hosted, historical reporting: AI clusters failures by root
cause, scores flaky tests from run history, and rates each launch’s risk — across every CI run and every
package in your monorepo.
Why Jest’s built-in output isn’t enough
Jest’s reporting is intentionally local: rich terminal output, a machine-readable
--json file, and — if you add a package like
jest-html-reporters — a local HTML report. All of it is
per-run and lives on the machine that ran it. Nothing collects results across CI runs, aggregates the
packages in a monorepo, or tells you whether a test has been getting flakier over the last two weeks. For
that you need something that stores results over time and analyzes them.
Send Jest results to Qualflare
Two steps. First, have Jest write a JSON results file — this is built into Jest, no extra reporter required:
# Jest writes a JSON results file natively — no extra reporter needed
npx jest --json --outputFile=jest-results.json
Then upload that file with the Qualflare CLI. The --format jest
flag uses the Jest-aware parser; the CLI attaches your Git branch and commit automatically:
# Upload to Qualflare with the Jest-aware parser
qf my-project collect jest-results.json --format jest In CI, that’s one extra step after your test run (GitHub Actions shown — GitLab CI, CircleCI, and Jenkins work the same way). Authenticate the CLI once with your Qualflare access token, stored as a CI secret — see the CLI docs.
# .github/workflows/tests.yml
- name: Run Jest
run: npx jest --json --outputFile=jest-results.json
- name: Upload results to Qualflare
if: always() # upload even when tests fail — that's the point
run: qf my-project collect jest-results.json --format jest What you get on top of Jest
- AI failure clustering. When a single broken mock or import takes down 40 tests, Qualflare groups them by root cause — so you fix one thing instead of scrolling 40 stack traces.
- Flaky detection from history. Qualflare scores each test’s flakiness from its pass/fail record across runs — the accurate, retry-free method. (Jest doesn’t retry by default; if you emit JUnit XML via
jest-junit, any in-run retries are read too.) - Monorepo aggregation. Upload each package’s JSON and Qualflare merges them into one launch — a single picture across every project in the repo.
- Per-launch risk. Each CI run becomes a launch with a risk rating, the failing areas, and recommended next steps — a ship / don’t-ship signal that arrives with the results.
- History, trends & defects. Pass rate, slowest tests, and flakiness over time across branches — plus a defect you can open straight from a failing run.
Raw Jest output vs Qualflare
| --json / jest-html-reporters | Qualflare | |
|---|---|---|
| History across CI runs | — | Yes |
| Aggregates monorepo packages | — | Yes |
| AI failure clustering (root cause) | — | Yes |
| Flaky scoring over time | — | Yes |
| Local, zero-setup, offline | Yes | — |
Complementary: keep --json / jest-html-reporters for local
runs, add Qualflare for hosted, historical CI observability.
Get AI analysis on your Jest runs
Start free — add --json --outputFile, run qf collect, and get your first AI analysis in minutes.
Qualflare works the same with Playwright, pytest, Cypress, JUnit and 20+ more frameworks. Weighing tools? See how it compares to other test management platforms, or browse all framework reporting guides.
Monorepos, projects, and Jest sharding
Jest is the framework most likely to be running inside a
monorepo, and its projects feature runs
every package’s suite in one invocation — which means one results file already covering the whole
repo, with each test tagged by its project:
// jest.config.js — multi-project monorepo: one run, every package reported
module.exports = {
projects: ['<rootDir>/packages/*'],
};
For big suites, Jest 28+ added native sharding. Unlike
Playwright there’s no blob-merge step — each shard writes its own JSON, and you pass all of them
to a single qf collect (it takes multiple files
and globs) so the whole sharded run lands as one launch:
# Jest 28+ shards natively — one JSON per shard
npx jest --shard=1/3 --json --outputFile=jest-results-1.json
# Collect every shard's file in ONE command so the run stays one launch
qf my-project collect jest-results-*.json
One thing Jest deliberately lacks is built-in retries at the
runner level — jest.retryTimes() exists
per test file but most teams run without retries, so flakiness shows up as raw intermittent
failures rather than recorded retry attempts. That makes cross-run history the only
reliable way to separate a flaky Jest test from a real regression — exactly what hosted reporting
adds.
Frequently asked questions
How do I send Jest results to Qualflare?
Jest writes a JSON results file natively — no extra reporter needed — with npx jest --json --outputFile=jest-results.json. Then upload it with the Qualflare CLI: qf <project> collect jest-results.json --format jest. The CLI attaches your Git branch and commit and turns the run into a tracked launch with AI analysis.
Does Qualflare detect flaky Jest tests?
Yes — by analyzing each test’s pass/fail history across runs, which is the accurate, retry-free way to spot flakiness (in-run retries can actually mask it). Jest doesn’t retry by default, so history-based scoring is the right approach: Qualflare surfaces which Jest tests are intermittently failing and whether that’s trending up.
Can I use the jest-junit reporter instead of JSON?
Yes. If you already emit JUnit XML with jest-junit, upload it with --format junit instead of --format jest — both work. The JUnit-XML route also reads any in-run retry counts and flaky status you’ve enabled (e.g. via jest.retryTimes()) directly from the file. Pick whichever format your pipeline already produces.
Does it work with a monorepo or Jest “projects”?
Yes. Run Jest across your monorepo packages or projects config, then upload the JSON (or one file per package). Qualflare aggregates them into a single launch, so you get one pass/fail picture and shared history across the whole repo rather than a separate report per package.
Does it work in GitHub Actions and other CI for Node?
Yes. Add a step after your Jest run that calls qf <project> collect on the JSON file. The CLI auto-attaches the Git branch and commit (or pass --branch/--commit), so each CI run becomes a tracked launch. The same flow works in GitLab CI, CircleCI, Bitbucket Pipelines, and Jenkins.
Setup reflects the Qualflare CLI (docs.qualflare.com) and Jest’s built-in JSON output as of June 2026. Written by İbrahim Süren, Qualflare.