Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run TUnit tests with Playwright. Use when user asks to run tests, execute tests, or check if tests pass.
.claude/skills/aiskillstore-tunit/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 46% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -18% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 30% | 0% |
This project uses TUnit with Playwright for testing. Tests are located in tests/SummitUI.Tests.Playwright/.
bashdotnet run --project tests/SummitUI.Tests.Playwright
To prevent system overload when running Playwright tests, limit parallel test execution:
bash# Run with maximum 1 parallel test (sequential) dotnet run --project tests/SummitUI.Tests.Playwright -- --maximum-parallel-tests 1 # Run with maximum 8 parallel tests dotnet run --project tests/SummitUI.Tests.Playwright -- --maximum-parallel-tests 8
TUnit uses --treenode-filter with path pattern: /assembly/namespace/class/test
Filter by class name:
bashdotnet run --project SummitUI.Tests.Playwright -- --treenode-filter '/*/*/ClassName/*'
Filter by exact test name:
bashdotnet run --project SummitUI.Tests.Playwright -- --treenode-filter '/*/*/*/TestName'
Examples:
bash# Run all Select accessibility tests dotnet run --project tests/SummitUI.Tests.Playwright -- --treenode-filter '/*/*/SelectAccessibilityTests/*' # Run specific test by name dotnet run --project tests/SummitUI.Tests.Playwright -- --treenode-filter '/*/*/*/Trigger_ShouldHave_RoleCombobox' # Run tests matching pattern (wildcard in test name) dotnet run --project tests/SummitUI.Tests.Playwright -- --treenode-filter '/*/*/*/Keyboard*' # Run all tests in namespace dotnet run --project tests/SummitUI.Tests.Playwright -- --treenode-filter '/*/SummitUI.Tests.Playwright/*/*'
When a debugger is attached, Playwright will run in debug mode (PWDEBUG=1) automatically via the Hooks.cs setup.
Add --report flags for different output formats:
bash# Console output with details dotnet run --project tests/SummitUI.Tests.Playwright -- --output-format console-detailed # Generate TRX report dotnet run --project tests/SummitUI.Tests.Playwright -- --report-trx
The test project includes several features to reduce flakiness:
[Retry(2)] in GlobalSetup.cs)[assembly: NotInParallel] in GlobalSetup.csHooks.cs waits for the Blazor server to be fully ready before tests starttunit.json for longer test and hook timeoutsGlobalSetup.cs - Assembly-level test configuration (retries, parallelism)Hooks.cs - Test session setup/teardown (starts Blazor server)BlazorWebApplicationFactory.cs - WebApplicationFactory for hosting the test servertunit.json - TUnit configuration file*AccessibilityTests.cs - Accessibility test classes inheriting from PageTestTUnit.Playwright.PageTest to get Page access[Before(Test)] for per-test setup[Before(TestSession)] / [After(TestSession)] for session-wide setupHooks.ServerUrl| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 5,827 | 8,633 | +48% | 1 | 1 | 0% | 975 | 1,422 | +46% | 0 | 0 | — |
case-02 | fail→pass | 10,038 | 8,034 | -20% | 1 | 1 | 0% | 1,642 | 1,340 | -18% | 0 | 0 | — |
case-03 | fail→pass | 11,091 | 1,898 | -83% | 1 | 1 | 0% | 971 | 1,159 | +19% | 0 | 0 | — |
case-04 | fail→pass | 8,620 | 7,803 | -9% | 1 | 1 | 0% | 685 | 1,295 | +89% | 0 | 0 | — |
case-05 | fail→pass | 6,091 | 8,844 | +45% | 1 | 1 | 0% | 1,196 | 1,559 | +30% | 0 | 0 | — |
case-06 | fail→pass | 7,953 | 6,864 | -14% | 1 | 1 | 0% | 1,354 | 1,109 | -18% | 0 | 0 | — |
case-07 | fail→pass | 3,750 | 6,966 | +86% | 1 | 1 | 0% | 640 | 1,157 | +81% | 0 | 0 | — |
case-08 | fail→pass | 14,835 | 2,513 | -83% | 1 | 1 | 0% | 1,798 | 1,274 | -29% | 0 | 0 | — |
case-09 | fail→pass | 12,586 | 2,613 | -79% | 1 | 1 | 0% | 1,856 | 1,245 | -33% | 0 | 0 | — |
case-10 | fail→pass | 16,546 | 2,315 | -86% | 1 | 1 | 0% | 1,977 | 1,161 | -41% | 0 | 0 | — |
case-11 | fail→pass | 22,059 | 7,422 | -66% | 1 | 1 | 0% | 3,353 | 1,157 | -65% | 0 | 0 | — |
case-12 | fail→pass | 15,519 | 7,670 | -51% | 1 | 1 | 0% | 2,630 | 1,259 | -52% | 0 | 0 | — |
case-13 | fail→pass | 10,194 | 6,455 | -37% | 1 | 1 | 0% | 862 | 1,022 | +19% | 0 | 0 | — |
case-14 | fail→pass | 16,557 | 1,791 | -89% | 1 | 1 | 0% | 3,382 | 1,109 | -67% | 0 | 0 | — |
case-15 | pass→pass | 19,013 | 5,503 | -71% | 1 | 1 | 0% | 2,372 | 1,807 | -24% | 0 | 0 | — |
case-16 | fail→pass | 15,084 | 6,790 | -55% | 1 | 1 | 0% | 1,607 | 1,093 | -32% | 0 | 0 | — |
case-17 | fail→pass | 11,696 | 2,335 | -80% | 1 | 1 | 0% | 1,184 | 1,183 | -0% | 0 | 0 | — |
case-18 | fail→pass | 8,400 | 1,782 | -79% | 1 | 1 | 0% | 591 | 1,072 | +81% | 0 | 0 | — |
case-19 | pass→pass | 6,492 | 4,396 | -32% | 1 | 1 | 0% | 1,072 | 1,563 | +46% | 0 | 0 | — |
case-20 | pass→pass | 3,813 | 3,425 | -10% | 1 | 1 | 0% | 747 | 1,421 | +90% | 0 | 0 | — |
case-21 | pass→pass | 12,209 | 8,475 | -31% | 1 | 1 | 0% | 1,317 | 2,084 | +58% | 0 | 0 | — |
case-22 | pass→pass | 8,387 | 3,948 | -53% | 1 | 1 | 0% | 522 | 1,449 | +178% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +77 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.