mcpField
M
mobile-app-testing

mobile-app-testing

github.com/secondskyTesting & quality240472 installsUpdated 5w ago
Repository

About mobile-app-testing

A mobile app testing skill for teams working with React Native, iOS, and Android. It outlines a testing pyramid and examples spanning unit, integration, and end-to-end tests.

Key features

  1. 01Testing pyramid guidance
  2. 02React Native Jest and Detox examples
  3. 03iOS XCTest examples
  4. 04Android Espresso examples
  5. 05Advice on test coverage and failure paths

Use cases

  1. 01Plan unit, integration, and end-to-end coverage
  2. 02Test mobile login and other critical flows
  3. 03Check business logic and error handling

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/secondsky/claude-skills --skill mobile-app-testing

After installing, type/mobile-app-testingin Claude Code to confirm it loaded.

Details

From the project README

Mobile App Testing

Implement comprehensive testing strategies for mobile applications.

Testing Pyramid

LevelToolsCoverage
UnitJest, XCTest, JUnit70%
IntegrationDetox, Espresso20%
E2EAppium, Detox10%

React Native (Jest + Detox)

// 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('[email protected]');
    await element(by.id('password-input')).typeText('password123');
    await element(by.id('login-button')).tap();
    await expect(element(by.id('dashboard'))).toBeVisible();
  });
});

iOS (XCTest)

func testLoginSuccess() {
    let app = XCUIApplication()
    app.launch()

    app.textFields["email"].tap()
    app.textFields["email"].typeText("[email protected]")
    app.secureTextFields["password"].typeText("password123")
    app.buttons["Login"].tap()

    XCTAssertTrue(app.staticTexts["Welcome"].exists)
}

Android (Espresso)

@Test
fun loginSuccess() {
    onView(withId(R.id.email)).perform(typeText("[email protected]"))
    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

Comments

Markdown supported