ai/ios-skills/ios-axiom-ios-testing/SKILL.md
Use when writing ANY test, debugging flaky tests, making tests faster, or asking about Swift Testing vs XCTest. Covers unit tests, UI tests, fast tests without simulator, async testing, test architecture.
npx skillsauth add kurko/dotfiles axiom-ios-testingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You MUST use this skill for ANY testing-related question, including writing tests, debugging test failures, making tests faster, or choosing between testing approaches.
Use this router when you encounter:
This router invokes specialized skills based on the specific testing need:
Triggers:
@Test, #expect, #require, @Suite)withMainSerialExecutor, TestClockswift test)Why swift-testing: Modern Swift Testing framework with parallel execution, better async support, and the ability to run without launching simulator.
Invoke: Read the axiom-swift-testing skill
Triggers:
sleep() or arbitrary timeoutsWhy ui-testing: XCUITest requires simulator and has unique patterns for reliability.
Invoke: Read the axiom-ui-testing skill
Triggers:
await confirmation for async callbacks@MainActor on UI tests@SuiteWhy test-failure-analyzer: Specialized agent that scans for patterns causing intermittent failures in Swift Testing.
Invoke: Launch test-failure-analyzer agent
Triggers:
confirmation for callbacks (Swift Testing)expectedCount for multiple callbacks@MainActor @TestWhy testing-async: Dedicated patterns for async code in Swift Testing framework.
Invoke: Read the axiom-testing-async skill
Triggers:
Why xcode-debugging: Test failures from environment issues, not test logic.
Invoke: Read the axiom-xcode-debugging skill
Triggers:
Why test-runner: Specialized agent for command-line test execution with xcresulttool parsing.
Invoke: Launch test-runner agent
Triggers:
Why test-debugger: Automated cycle of running tests, analyzing failures, suggesting fixes, and re-running.
Invoke: Launch test-debugger agent
Triggers:
Why ui-recording: Focused guide for Xcode 26's Record/Replay/Review workflow.
Invoke: Read the axiom-ui-recording skill
Triggers:
Why testing-auditor: Scans for sleep() calls, shared mutable state, missing assertions, XCTest to Swift Testing migration opportunities, and Swift 6 concurrency issues in tests.
Invoke: Launch testing-auditor agent or /axiom:audit testing
Triggers:
Why simulator-tester + axe-ref: AXe provides accessibility-based UI automation when XCUITest isn't available.
Invoke: Launch simulator-tester agent (uses axiom-axe-ref)
| Need | Use | |------|-----| | Unit tests (logic, models) | Swift Testing | | UI tests (tap, swipe, assert screens) | XCUITest (XCTest) | | Tests without simulator | Swift Testing + Package/Framework | | Parameterized tests | Swift Testing | | Performance measurements | XCTest (XCTMetric) | | Objective-C tests | XCTest |
| Thought | Reality | |---------|---------| | "Simple test question, I don't need the skill" | Proper patterns prevent test debt. swift-testing has copy-paste solutions. | | "I know XCTest well enough" | Swift Testing is significantly better for unit tests. swift-testing covers migration. | | "Tests are slow but it's fine" | Fast tests enable TDD. swift-testing shows how to run without simulator. | | "I'll fix the flaky test with a sleep()" | sleep() makes tests slower AND flakier. ui-testing has condition-based waiting patterns. | | "I'll add tests later" | Tests written after implementation miss edge cases. swift-testing makes writing tests first easy. |
User: "How do I write a unit test in Swift?" → Invoke: axiom-swift-testing
User: "My UI tests are flaky in CI" → Check codebase: XCUIApplication/XCUIElement patterns? → ui-testing → Check codebase: @Test/#expect patterns? → test-failure-analyzer
User: "Tests fail randomly, pass sometimes fail sometimes" → Invoke: test-failure-analyzer (Agent)
User: "Tests pass locally but fail in CI" → Invoke: test-failure-analyzer (Agent)
User: "How do I test async code without flakiness?" → Invoke: testing-async
User: "How do I test callback-based APIs with Swift Testing?" → Invoke: testing-async
User: "What's the Swift Testing equivalent of XCTestExpectation?" → Invoke: testing-async
User: "How do I use confirmation with expectedCount?" → Invoke: testing-async
User: "I want my tests to run faster" → Invoke: axiom-swift-testing (Fast Tests section)
User: "Should I use Swift Testing or XCTest?" → Invoke: axiom-swift-testing (Migration section) + this decision tree
User: "Tests crash before any assertions" → Invoke: axiom-xcode-debugging
User: "Run my tests and show me what failed" → Invoke: test-runner (Agent)
User: "Help me fix these failing tests" → Invoke: test-debugger (Agent)
User: "Parse the xcresult from my last test run" → Invoke: test-runner (Agent)
User: "Export failure screenshots from my tests" → Invoke: test-runner (Agent)
User: "How do I record UI automation in Xcode 26?" → Invoke: axiom-ui-recording
User: "How do I use test plans for multi-language testing?" → Invoke: axiom-ui-recording
User: "Can I automate my app without writing XCUITests?" → Invoke: simulator-tester (Agent) + axiom-axe-ref
User: "How do I tap a button using AXe?" → Invoke: axiom-axe-ref (via simulator-tester)
User: "Audit my tests for quality issues"
→ Invoke: testing-auditor agent
User: "Should I migrate to Swift Testing?"
→ Invoke: testing-auditor agent
data-ai
Merge the current worktree branch into main and sync main back. Use when the user says "merge to main", "ship it", "merge and continue", or after completing a task in a worktree and wanting to continue with the next one.
tools
Synchronize AI agent skills, commands, configs, permissions, hooks, and instructions across Claude Code, Codex CLI, and other Agent Skills-compatible tools. Use when the user asks to pull skills from Claude into Codex, sync Codex work back to Claude, migrate agent commands, reconcile frontmatter, update permissions, or keep agent setup files in parity.
testing
Write or update UI-independent use cases for QA. Use when the user says "write use cases", "add use cases", "QA use cases", "update use cases", "compose use cases", or when starting implementation of a new feature (after plan approval). Also activates for "what should we test", "regression cases", or "use cases for QA".
documentation
Skill on how to write a task. Use when user asks you to write a task (for Asana, Linear, Jira, Notion and equivalent). Also activates when user says "create task", "write task", or similar task creation workflow requests.