react-native-testing-patterns
React Native Testing Patterns
This skill provides the established testing patterns for the Fitness Tracker App, ensuring high code quality and reliable automated verification.
When to Use This Skill
Use this skill when you need to:
- Write unit tests for MST models and stores
- Create component tests using React Testing Library (RTL)
- Mock Expo modules or native dependencies
- Implement E2E flows using Maestro
- Test services, utility functions, or API logic
Unit Testing (MST)
Model Testing
import { MyModel } from "@/models/MyModel"
describe("MyModel", () => {
it("can be created", () => {
const instance = MyModel.create({ id: "1", name: "Test" })
expect(instance.name).toBe("Test")
})
it("handles actions correctly", () => {
const instance = MyModel.create({ id: "1", name: "Test" })
instance.setName("Updated")
expect(instance.name).toBe("Updated")
})
})
Component Testing (RTL)
Basic Component Render
import { render } from "@testing-library/react-native"
import { ThemeProvider } from "@/theme/context"
import { MyComponent } from "./MyComponent"
describe("MyComponent", () => {
it("renders correctly", () => {
const { getByText } = render(
<ThemeProvider>
<MyComponent text="Hello" />
</ThemeProvider>
)
expect(getByText("Hello")).toBeDefined()
})
})
Mocking Patterns
Mocking Expo Modules
Mocks are usually centralized in test/setup.ts.
jest.mock("expo-localization", () => ({
getLocales: () => [{ languageTag: "en-US", textDirection: "ltr" }],
}))
E2E Testing (Maestro)
Basic Flow Pattern
appId: ${MAESTRO_APP_ID}
onFlowStart:
- runFlow: ../shared/_OnFlowStart.yaml
---
- tapOn: "Home"
- assertVisible: "My Collection"
References
See MST_TESTING.md for detailed store testing patterns.
See COMPONENT_TESTING.md for RTL and theme provider patterns.
See MAESTRO_FLOWS.md for E2E testing best practices.
More from planeinabottle/fitnessmobileapp
mobx-state-tree-store-builder
Automates creation of MobX State Tree stores following Fitness Tracker App patterns for domain models, collections, and root store integration. Use when creating new MST stores, models, or extending existing store functionality with proper TypeScript typing, actions, views, and integration patterns.
14react-native-i18n-workflow
Manages internationalization strings and translation workflows using i18next and react-i18next. Use when adding new text, supporting additional languages, or implementing pluralization and interpolation in Fitness Tracker App.
4react-native-storage-manager
Handles MMKV storage operations and data persistence patterns with encryption. Use when implementing data persistence, caching, or user preferences in Fitness Tracker App.
4react-native-navigation-builder
Creates navigation structures following the app's nested navigator pattern. Handles type-safe navigation, stack and tab setup, and screen parameter management in Fitness Tracker App.
3