mobile-app-testing — 1panel mobile-app-testing, 1Panel-Client, community, 1panel, ide skills, android, de-v-o-p-s, devops-tools, flutter, flutter-app, Claude Code

v1.0.0

About this Skill

Perfect for Quality Assurance Agents needing comprehensive mobile application testing strategies. Comprehensive mobile app testing strategies for iOS and Android. Covers unit tests, UI tests, integration tests, performance testing, and test automation with Detox, Appium, and XCTest.

# Core Topics

IsKenKenYa IsKenKenYa
[14]
[4]
Updated: 3/5/2026

Killer-Skills Review

Decision support comes first. Repository text comes second.

Reviewed Landing Page Review Score: 9/11

Killer-Skills keeps this page indexable because it adds recommendation, limitations, and review signals beyond the upstream repository text.

Original recommendation layer Concrete use-case guidance Explicit limitations and caution Quality floor passed for review Locale and body language aligned
Review Score
9/11
Quality Score
54
Canonical Locale
en
Detected Body Locale
en

Perfect for Quality Assurance Agents needing comprehensive mobile application testing strategies. Comprehensive mobile app testing strategies for iOS and Android. Covers unit tests, UI tests, integration tests, performance testing, and test automation with Detox, Appium, and XCTest.

Core Value

Empowers agents to implement unit tests, UI tests, integration tests, and performance testing for reliable mobile application releases, utilizing frameworks like Jest and Detox, and supporting technologies such as Flutter, Dart, and OpenAPI.

Ideal Agent Persona

Perfect for Quality Assurance Agents needing comprehensive mobile application testing strategies.

Capabilities Granted for mobile-app-testing

Automating UI testing across iOS and Android platforms
Performing integration testing with backend services
Optimizing mobile application performance through comprehensive testing

! Prerequisites & Limits

  • Requires knowledge of testing frameworks like Jest and Detox
  • Limited to mobile application development with supported technologies like Flutter and Dart

Source Boundary

The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.

Curated Collection Review

Reviewed In Curated Collections

This section shows how Killer-Skills has already collected, reviewed, and maintained this skill inside first-party curated paths. For operators and crawlers alike, this is a stronger signal than treating the upstream README as the primary story.

After The Review

Decide The Next Action Before You Keep Reading Repository Material

Killer-Skills should not stop at opening repository instructions. It should help you decide whether to install this skill, when to cross-check against trusted collections, and when to move into workflow rollout.

Labs Demo

Browser Sandbox Environment

⚡️ Ready to unleash?

Experience this Agent in a zero-setup browser environment powered by WebContainers. No installation required.

Boot Container Sandbox

FAQ & Installation Steps

These questions and steps mirror the structured data on this page for better search understanding.

? Frequently Asked Questions

What is mobile-app-testing?

Perfect for Quality Assurance Agents needing comprehensive mobile application testing strategies. Comprehensive mobile app testing strategies for iOS and Android. Covers unit tests, UI tests, integration tests, performance testing, and test automation with Detox, Appium, and XCTest.

How do I install mobile-app-testing?

Run the command: npx killer-skills add IsKenKenYa/1Panel-Client/mobile-app-testing. It works with Cursor, Windsurf, VS Code, Claude Code, and 19+ other IDEs.

What are the use cases for mobile-app-testing?

Key use cases include: Automating UI testing across iOS and Android platforms, Performing integration testing with backend services, Optimizing mobile application performance through comprehensive testing.

Which IDEs are compatible with mobile-app-testing?

This skill is compatible with Cursor, Windsurf, VS Code, Trae, Claude Code, OpenClaw, Aider, Codex, OpenCode, Goose, Cline, Roo Code, Kiro, Augment Code, Continue, GitHub Copilot, Sourcegraph Cody, and Amazon Q Developer. Use the Killer-Skills CLI for universal one-command installation.

Are there any limitations for mobile-app-testing?

Requires knowledge of testing frameworks like Jest and Detox. Limited to mobile application development with supported technologies like Flutter and Dart.

How To Install

  1. 1. Open your terminal

    Open the terminal or command line in your project directory.

  2. 2. Run the install command

    Run: npx killer-skills add IsKenKenYa/1Panel-Client/mobile-app-testing. The CLI will automatically detect your IDE or AI agent and configure the skill.

  3. 3. Start using the skill

    The skill is now active. Your AI agent can use mobile-app-testing immediately in the current project.

Upstream Repository Material

The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.

Upstream Source

mobile-app-testing

Install mobile-app-testing, an AI agent skill for AI agent workflows and automation. Works with Claude Code, Cursor, and Windsurf with one-command setup.

SKILL.md
Readonly
Upstream Repository Material
The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.
Supporting Evidence

Mobile App Testing

Overview

Implement comprehensive testing strategies for mobile applications including unit tests, UI tests, integration tests, and performance testing.

When to Use

  • Creating reliable mobile applications with test coverage
  • Automating UI testing across iOS and Android
  • Performance testing and optimization
  • Integration testing with backend services
  • Regression testing before releases

Instructions

1. React Native Testing with Jest & Detox

javascript
1// Unit test with Jest 2import { calculate } from '../utils/math'; 3 4describe('Math utilities', () => { 5 test('should add two numbers', () => { 6 expect(calculate.add(2, 3)).toBe(5); 7 }); 8 9 test('should handle negative numbers', () => { 10 expect(calculate.add(-2, 3)).toBe(1); 11 }); 12}); 13 14// Component unit test 15import React from 'react'; 16import { render, screen } from '@testing-library/react-native'; 17import { UserProfile } from '../components/UserProfile'; 18 19describe('UserProfile Component', () => { 20 test('renders user name correctly', () => { 21 const mockUser = { id: '1', name: 'John Doe', email: 'john@example.com' }; 22 render(<UserProfile user={mockUser} />); 23 24 expect(screen.getByText('John Doe')).toBeTruthy(); 25 }); 26 27 test('handles missing user gracefully', () => { 28 render(<UserProfile user={null} />); 29 expect(screen.getByText(/no user data/i)).toBeTruthy(); 30 }); 31}); 32 33// E2E Testing with Detox 34describe('Login Flow E2E Test', () => { 35 beforeAll(async () => { 36 await device.launchApp(); 37 }); 38 39 beforeEach(async () => { 40 await device.reloadReactNative(); 41 }); 42 43 it('should login successfully with valid credentials', async () => { 44 await waitFor(element(by.id('emailInput'))) 45 .toBeVisible() 46 .withTimeout(5000); 47 48 await element(by.id('emailInput')).typeText('user@example.com'); 49 await element(by.id('passwordInput')).typeText('password123'); 50 await element(by.id('loginButton')).multiTap(); 51 52 await waitFor(element(by.text('Home Feed'))) 53 .toBeVisible() 54 .withTimeout(5000); 55 }); 56 57 it('should show error with invalid credentials', async () => { 58 await element(by.id('emailInput')).typeText('invalid@example.com'); 59 await element(by.id('passwordInput')).typeText('wrongpass'); 60 await element(by.id('loginButton')).multiTap(); 61 62 await waitFor(element(by.text(/invalid credentials/i))) 63 .toBeVisible() 64 .withTimeout(5000); 65 }); 66 67 it('should navigate between tabs', async () => { 68 await element(by.id('profileTab')).tap(); 69 await waitFor(element(by.text('Profile'))) 70 .toBeVisible() 71 .withTimeout(2000); 72 73 await element(by.id('homeTab')).tap(); 74 await waitFor(element(by.text('Home Feed'))) 75 .toBeVisible() 76 .withTimeout(2000); 77 }); 78});

2. iOS Testing with XCTest

swift
1import XCTest 2@testable import MyApp 3 4class UserViewModelTests: XCTestCase { 5 var viewModel: UserViewModel! 6 var mockNetworkService: MockNetworkService! 7 8 override func setUp() { 9 super.setUp() 10 mockNetworkService = MockNetworkService() 11 viewModel = UserViewModel(networkService: mockNetworkService) 12 } 13 14 func testFetchUserSuccess() async { 15 let expectedUser = User(id: UUID(), name: "John", email: "john@example.com") 16 mockNetworkService.mockUser = expectedUser 17 18 await viewModel.fetchUser(id: expectedUser.id) 19 20 XCTAssertEqual(viewModel.user?.name, "John") 21 XCTAssertNil(viewModel.errorMessage) 22 XCTAssertFalse(viewModel.isLoading) 23 } 24 25 func testFetchUserFailure() async { 26 mockNetworkService.shouldFail = true 27 28 await viewModel.fetchUser(id: UUID()) 29 30 XCTAssertNil(viewModel.user) 31 XCTAssertNotNil(viewModel.errorMessage) 32 XCTAssertFalse(viewModel.isLoading) 33 } 34} 35 36class MockNetworkService: NetworkService { 37 var mockUser: User? 38 var shouldFail = false 39 40 override func fetch<T: Decodable>( 41 _: T.Type, 42 from endpoint: String 43 ) async throws -> T { 44 if shouldFail { 45 throw NetworkError.unknown 46 } 47 return mockUser as! T 48 } 49} 50 51// UI Test 52class LoginUITests: XCTestCase { 53 override func setUp() { 54 super.setUp() 55 continueAfterFailure = false 56 XCUIApplication().launch() 57 } 58 59 func testLoginFlow() { 60 let app = XCUIApplication() 61 62 let emailTextField = app.textFields["emailInput"] 63 let passwordTextField = app.secureTextFields["passwordInput"] 64 let loginButton = app.buttons["loginButton"] 65 66 emailTextField.tap() 67 emailTextField.typeText("user@example.com") 68 69 passwordTextField.tap() 70 passwordTextField.typeText("password123") 71 72 loginButton.tap() 73 74 let homeText = app.staticTexts["Home Feed"] 75 XCTAssertTrue(homeText.waitForExistence(timeout: 5)) 76 } 77 78 func testNavigationBetweenTabs() { 79 let app = XCUIApplication() 80 let profileTab = app.tabBars.buttons["Profile"] 81 let homeTab = app.tabBars.buttons["Home"] 82 83 profileTab.tap() 84 XCTAssertTrue(app.staticTexts["Profile"].exists) 85 86 homeTab.tap() 87 XCTAssertTrue(app.staticTexts["Home"].exists) 88 } 89}

3. Android Testing with Espresso

kotlin
1@RunWith(AndroidJUnit4::class) 2class UserViewModelTest { 3 private lateinit var viewModel: UserViewModel 4 private val mockApiService = mock<ApiService>() 5 6 @Before 7 fun setUp() { 8 viewModel = UserViewModel(mockApiService) 9 } 10 11 @Test 12 fun fetchUserSuccess() = runTest { 13 val expectedUser = User("1", "John", "john@example.com") 14 `when`(mockApiService.getUser("1")).thenReturn(expectedUser) 15 16 viewModel.fetchUser("1") 17 18 assertEquals(expectedUser.name, viewModel.user.value?.name) 19 assertEquals(null, viewModel.errorMessage.value) 20 } 21 22 @Test 23 fun fetchUserFailure() = runTest { 24 `when`(mockApiService.getUser("1")) 25 .thenThrow(IOException("Network error")) 26 27 viewModel.fetchUser("1") 28 29 assertEquals(null, viewModel.user.value) 30 assertNotNull(viewModel.errorMessage.value) 31 } 32} 33 34// UI Test with Espresso 35@RunWith(AndroidJUnit4::class) 36class LoginActivityTest { 37 @get:Rule 38 val activityRule = ActivityScenarioRule(LoginActivity::class.java) 39 40 @Test 41 fun testLoginWithValidCredentials() { 42 onView(withId(R.id.emailInput)) 43 .perform(typeText("user@example.com")) 44 45 onView(withId(R.id.passwordInput)) 46 .perform(typeText("password123")) 47 48 onView(withId(R.id.loginButton)) 49 .perform(click()) 50 51 onView(withText("Home")) 52 .check(matches(isDisplayed())) 53 } 54 55 @Test 56 fun testLoginWithInvalidCredentials() { 57 onView(withId(R.id.emailInput)) 58 .perform(typeText("invalid@example.com")) 59 60 onView(withId(R.id.passwordInput)) 61 .perform(typeText("wrongpassword")) 62 63 onView(withId(R.id.loginButton)) 64 .perform(click()) 65 66 onView(withText(containsString("Invalid credentials"))) 67 .check(matches(isDisplayed())) 68 } 69 70 @Test 71 fun testNavigationBetweenTabs() { 72 onView(withId(R.id.profileTab)).perform(click()) 73 onView(withText("Profile")).check(matches(isDisplayed())) 74 75 onView(withId(R.id.homeTab)).perform(click()) 76 onView(withText("Home")).check(matches(isDisplayed())) 77 } 78}

4. Performance Testing

swift
1import XCTest 2 3class PerformanceTests: XCTestCase { 4 func testListRenderingPerformance() { 5 let viewModel = ItemsViewModel() 6 viewModel.items = (0..<1000).map { i in 7 Item(id: UUID(), title: "Item \(i)", price: Double(i)) 8 } 9 10 measure { 11 _ = viewModel.items.filter { $0.price > 50 } 12 } 13 } 14 15 func testNetworkResponseTime() { 16 let networkService = NetworkService() 17 18 measure { 19 let expectation = XCTestExpectation(description: "Fetch user") 20 21 Task { 22 do { 23 _ = try await networkService.fetch(User.self, from: "/users/test") 24 expectation.fulfill() 25 } catch { 26 XCTFail("Network request failed") 27 } 28 } 29 30 wait(for: [expectation], timeout: 10) 31 } 32 } 33}

Best Practices

✅ DO

  • Write tests for business logic first
  • Use dependency injection for testability
  • Mock external API calls
  • Test both success and failure paths
  • Automate UI testing for critical flows
  • Run tests on real devices
  • Measure performance on target devices
  • Keep tests isolated and independent
  • Use meaningful test names
  • Maintain >80% code coverage

❌ DON'T

  • Skip testing UI-critical flows
  • Use hardcoded test data
  • Ignore performance regressions
  • Test implementation details
  • Make tests flaky or unreliable
  • Skip testing on actual devices
  • Ignore accessibility testing
  • Create interdependent tests
  • Test without mocking APIs
  • Deploy untested code

Related Skills

Looking for an alternative to mobile-app-testing or another community skill for your workflow? Explore these related open-source skills.

View All

openclaw-release-maintainer

Logo of openclaw
openclaw

Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

333.8k
0
AI

widget-generator

Logo of f
f

Generate customizable widget plugins for the prompts.chat feed system

149.6k
0
AI

flags

Logo of vercel
vercel

The React Framework

138.4k
0
Browser

pr-review

Logo of pytorch
pytorch

Tensors and Dynamic neural networks in Python with strong GPU acceleration

98.6k
0
Developer