"I've tested all the changes!"
Sure you have, Claude. 🤖
AI writes code faster than you can verify it. Undercover finds untested changes in every pull request, whether written by Claude, Copilot, or a human.
🎯 Test what changed, verify deterministically
🛠️ Works with all Ruby testing frameworks
🚀 Trusted by teams at GitLab, Rainforest QA, Rhino
Free forever for open-source repos.
14-day free trial for private repos. Supports Ruby and GitHub.
Leading Ruby engineering teams review test coverage with undercover
Integrating good tools into your code review flow simplifies everything 😌. A great example is https://t.co/nJOemX8oh7, ensuring each change is well-tested 🛠️. Kudos to @mrgrodo for creating it and offering fantastic support for any queries!
— Magda (@MagdaEriruos) December 8, 2023
Shoutout to @mrgrodo's (still underappreciated) work on https://t.co/IsSyc2lz0s! This little gem helped me keep 99% code coverage in one of of my Open Source Ruby gems: https://t.co/wkGVV6WSfL.
— Bajena (@Bajena) November 18, 2023
Totally recommend it if you care about the quality of your open source work!
How it works
Stop focusing on getting to 100% test coverage.
Detect when changed code is untested before it's deployed.
Find untested code blocks
Perfect for auto-generated code. AI-generated tests often miss critical paths. Built on SimpleCov and code structure analysis, Undercover checks guide the programmer to test adequately.
Worried about too many comments? You won't receive more than one comment per method, because Undercover understands code structure and only works with the current diff. Annotations are reported on changed classes, methods or blocks where line coverage or branch coverage was missing.
Ship on green
No untested changes in your pull request? Merge with confidence. All code, whether written by humans or AI, is verified.
If there are gaps, you control the rules: require the check to pass before merging, or use SimpleCov's :nocov: comments to explicitly allow exceptions. Either way, you understand what's covered.
Monitor your test suite health
Lists file names, class/method names and coverage information for a commit or pull request. Methods that cause the check to fail are flagged with a warning emoji (⚠️) - one or more line or branch appears in the PR diff and has to be fixed.
All others provide a refactoring opportunity for you to improve the test coverage if it's low somewhere outside of the diff.
Choose your setup
Install the Undercover GitHub App or explore the Ruby gems family
Open Source
Undercover CI is built on open-source and is free to use for non-profit public GitHub repositories. Sign Up with GitHub to get started.
If a hosted GitHub App integration won't work for you, check out these links to get started and with local and CI/CD workflows:
Get in touch to get support or discuss a custom solution.
Essentials
$69 per month*
Startups and small engineering teams.
💬 GitHub Checks annotations with coverage warnings and diff summary
🌳 Branch coverage
📊 Dashboards to track PR trends
📦 1000 completed checks per month for private repos
⏱️ Up to 3 concurrent coverage checks at a time
♾️ Unlimited users
Pro
$279 per month*
Medium to large engineering teams.
Includes everything in Essentials, plus:
♾️ Unlimited check builds for private repos
♾️ Unlimited concurrent check builds
⚙️ API Access
📧 24h email support turnaround time
* VAT not included, try free for 14 days,
yearly discounts available for all plans by default
Why Undercover?
Updates and links to read about Ruby test coverage strategy
The purpose of branch coverage is to check whether every conditional branch in a given line of code has been tested and Ruby has this feature since2.5. Ruby’ssimplecovcan report branch coverage too and now so does undercover with the new0.4release!
Today, I’m launching UndercoverCI— a CI robot who protects your Ruby codebase from untested code changes. Take a moment to learn why you should add it to your team’s code review workflow. Adding UndercoverCI to your code review workflow will prevent untested code changes from slipping into production without anyone noticing.
So what is the value of coverage analysis again? Well it helps you find which bits of your code aren't being tested. It's worth running coverage tools every so often and looking at these bits of untested code. Do they worry you that they aren't being tested?
Ruby coverage toolkit ready for the vibe coding era
Free for open-source repositories. Organization plans start at $49 per month with a free 14-day trial.
Sign Up with GitHub