Agent skill
flutter-testing
Flutter testing patterns with mocktail. Covers unit testing, widget testing, and BLoC/Cubit testing. Use when writing tests or setting up test infrastructure.
Install this agent skill to your Project
npx add-skill https://github.com/abhishekbrt/GlowState/tree/main/.opencode/skill/testing
SKILL.md
Flutter Testing
Test Commands
flutter test # Run all tests
flutter test test/features/auth/ # Run feature tests
flutter test --plain-name "returns empty" # Run by name pattern
flutter test --coverage # With coverage
Detailed Guides
| Topic | Guide | Use When |
|---|---|---|
| Unit Testing | unit-testing.md | Testing business logic, repositories, use cases |
| Widget Testing | widget-testing.md | Testing UI components, interactions |
| BLoC Testing | bloc-testing.md | Testing BLoC/Cubit state management |
Feature-First Test Structure
test/
├── features/
│ ├── auth/
│ │ ├── data/
│ │ │ ├── auth_repository_test.dart
│ │ │ └── auth_remote_source_test.dart
│ │ ├── domain/
│ │ │ └── login_usecase_test.dart
│ │ └── presentation/
│ │ ├── login_screen_test.dart
│ │ └── auth_bloc_test.dart
│ ├── home/
│ │ ├── data/
│ │ ├── domain/
│ │ └── presentation/
│ └── profile/
│ └── ...
├── core/
│ ├── network/
│ │ └── api_client_test.dart
│ └── utils/
│ └── validators_test.dart
└── helpers/
├── pump_app.dart # Test wrapper with providers
├── mocks.dart # Shared mock classes
└── fixtures.dart # Test data factories
Mocking with Mocktail
import 'package:mocktail/mocktail.dart';
class MockAuthRepository extends Mock implements AuthRepository {}
void main() {
late MockAuthRepository mockRepo;
setUp(() {
mockRepo = MockAuthRepository();
});
test('returns user on successful login', () async {
// Arrange
when(() => mockRepo.login(any(), any()))
.thenAnswer((_) async => User(id: '1', name: 'Test'));
// Act
final result = await mockRepo.login('email', 'pass');
// Assert
expect(result.name, equals('Test'));
verify(() => mockRepo.login('email', 'pass')).called(1);
});
}
Fakes vs Mocks
| Type | Use When | Example |
|---|---|---|
| Mock | Verify interactions | verify(() => mock.save(any())).called(1) |
| Fake | Need working implementation | FakeAuthRepo with in-memory Map |
| Stub | Fixed return values | when(() => mock.get()).thenReturn(value) |
Dependencies
dev_dependencies:
flutter_test:
sdk: flutter
mocktail: ^1.0.0
bloc_test: ^9.1.0 # If using BLoC
Test Naming
// ✅ Describe behavior
test('returns empty list when no todos exist', () {});
test('throws AuthException when credentials invalid', () {});
// ❌ Don't describe implementation
test('test getTodos', () {});
test('login test', () {});
Arrange-Act-Assert
test('adds item to cart', () {
// Arrange
final cart = Cart();
final item = Item(id: '1', price: 10.0);
// Act
cart.add(item);
// Assert
expect(cart.items, contains(item));
expect(cart.total, equals(10.0));
});
Group Related Tests
group('LoginUseCase', () {
group('when credentials valid', () {
test('returns user', () {});
test('caches auth token', () {});
});
group('when credentials invalid', () {
test('throws AuthException', () {});
test('does not cache token', () {});
});
});
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
building-flutter-apps
Build production-ready Flutter apps for Android/iOS using feature-first architecture. Covers project setup, UI patterns, state management (Riverpod/BLoC), navigation (go_router), testing (TDD with mocktail), and deployment. Use when creating Flutter projects, implementing features, debugging Flutter issues, or making architectural decisions.
flutter-ui
Flutter UI patterns including layouts, Material 3 components, and responsive design. Use when building screens, creating reusable widgets, or implementing responsive layouts.
flutter-architecture
Feature-first architecture patterns for scalable Flutter apps. Covers project structure, dependency injection with Riverpod, repository pattern, and clean architecture layers. Use when setting up new projects, creating features, or making structural decisions.
flutter-state-management
State management patterns for Flutter with Riverpod as primary solution. Covers provider types, async state, and local state patterns. Use when managing app state or implementing feature state logic.
edit-article
Edit and improve articles by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, or improve an article draft.
handoff
Compact the current conversation into a handoff document for another agent to pick up.
Didn't find tool you were looking for?