# Test Lens > A check of one Flutter test file against the testing guidance. Paste the file (or drop a _test.dart); the browser > masks comments and strings, matches every test, testWidgets, group and setUp to its closing bracket, reads each > test's body in order, and flags tester calls that are not awaited, testWidgets callbacks that are not async, expects > with no pump after a tap or text entry, tests that never call expect, widgets pumped with no MaterialApp, real I/O in > unit tests, real repositories and services where a Fake belongs, real waits and pumpAndSettle over an endless > spinner, and integration tests with no binding. Metered runs write the review and the rewritten test file. Built on > the SkillSafe skill @flutter/flutter-testing-apps, from flutter/skills (BSD-3-Clause), by the Flutter team. > Test Lens is an independent tool, not affiliated with or endorsed by Google or the Flutter team. https://test-lens.skillsafe.ai/ ## What is free - The scan: every finding with an id (C1, C2, ...), a severity (blocker - the file will not compile, or a test can pass without testing anything; major; minor), the line, the test it sits in, what the page saw and the fix. - Every test listed with its kind (unit, widget, integration), its expects, actions and pumps. - The skill's checklist marked from the scan, the run commands for the file (flutter test; a device, Chrome with chromedriver, xvfb-run on Linux CI, or Firebase Test Lab for integration tests), findings and tests as CSV, everything as JSON. ## The metered lanes Two tasks on gpt-terra, metered per run, routed by `task`. Input string fields: `task` (review or rewrite), `suite`, `code`, `carry` (rewrite only: the review's decisions) and `facts` (the page's scan and test list). - `review` replies with `summary`, `findings` (confirmed ids with the issue, the fix and a short code fix), `cleared`, `extra` (up to five gaps a scan cannot see, on real lines), `plan` (the fixes in order, naming their ids) and `caveats`. - `rewrite` replies with `summary`, `code` (the whole rewritten test file), `changes`, `kept` and `caveats`. The page holds every reply to its scan: each id accounted for exactly once, every class, every test name and the whole file kept, and the rewritten file re-scanned - a claimed fix the re-scan still finds, or a new finding, is flagged. ## Links - API tutorial: https://test-lens.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@flutter/flutter-testing-apps