Skip to main content

mobile-app-testing

Mobile app testing with unit tests, UI automation, performance testing. Use for test infrastructure, E2E tests, testing standards, or encountering test framework setup, device farms, flaky tests, platform-specific test errors.

Source facts

Repository
secondsky/claude-skills
Last source activity
April 2, 2026 at 17:49
Detected SKILL.md language
English
Stars
227
Forks
32

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
mobile-app-testing
description
Mobile app testing with unit tests, UI automation, performance testing. Use for test infrastructure, E2E tests, testing standards, or encountering test framework setup, device farms, flaky tests, platform-specific test errors.
metadata
{"keywords":"mobile testing, unit testing, UI automation, E2E testing, Jest, XCTest, JUnit, Detox, Espresso, Appium, React Native testing, iOS testing, Android testing, test framework, device farms, flaky tests, mobile test automation, integration testing, testing pyramid, test coverage"}
license
MIT
# Mobile App Testing Implement comprehensive testing strategies for mobile applications. ## Testing Pyramid | Level | Tools | Coverage | |-------|-------|----------| | Unit | Jest, XCTest, JUnit | 70% | | Integration | Detox, Espresso | 20% | | E2E | Appium, Detox | 10% | ## React Native (Jest + Detox) ```javascript // Unit test describe('CartService', () => { it('calculates total correctly', () => { const cart = new CartService(); cart.addItem({ price: 10, quantity: 2 }); expect(cart.getTotal()).toBe(20); }); }); // E2E test (Detox) describe('Login flow', () => { beforeEach(async () => { await device.reloadReactNative(); }); it('should login successfully', async () => { await element(by.id('email-input')).typeText('user@example.com'); await element(by.id('password-input')).typeText('password123'); await element(by.id('login-button')).tap(); await expect(element(by.id('dashboard'))).toBeVisible(); }); }); ``` ## iOS (XCTest) ```swift func testLoginSuccess() { let app = XCUIApplication() app.launch() app.textFields["email"].tap() app.textFields["email"].typeText("user@example.com") app.secureTextFields["password"].typeText("password123") app.buttons["Login"].tap() XCTAssertTrue(app.staticTexts["Welcome"].exists) } ``` ## Android (Espresso) ```kotlin @Test fun loginSuccess() { onView(withId(R.id.email)).perform(typeText("user@example.com")) onView(withId(R.id.password)).perform(typeText("password123")) onView(withId(R.id.loginButton)).perform(click()) onView(withId(R.id.dashboard)).check(matches(isDisplayed())) } ``` ## Best Practices - Test business logic first (unit tests) - Mock external dependencies - Test both success and failure paths - Automate critical user flows - Maintain >80% code coverage - Test on real devices periodically ## Avoid - Testing implementation details - Hardcoded test data - Interdependent tests - Skipping error case testing
View on GitHub