mogen_unit_tests 1.0.21 copy "mogen_unit_tests: ^1.0.21" to clipboard
mogen_unit_tests: ^1.0.21 copied to clipboard

Scans Riverpod AsyncNotifier classes and auto-generates Mocktail unit tests.

example/example.dart

// ignore_for_file: avoid_print

/// This file demonstrates how mogen_unit_tests works end-to-end.
///
/// Given the following feature structure in your Flutter project:
///
/// ```
/// lib/
/// └── features/
///     └── cart/
///         └── presentation/
///             ├── notifiers/
///             │   └── cart_notifier.dart
///             └── states/
///                 └── cart_state.dart
/// ```
///
/// Running `dart run mogen_unit_tests` from your project root generates:
///
/// ```
/// test/
/// └── unit/
///     └── features/
///         └── cart/
///             └── cart_notifier_test.dart
/// ```
///
/// ---
///
/// ## Example input — cart_notifier.dart
///
/// ```dart
/// import 'package:riverpod_annotation/riverpod_annotation.dart';
/// import '../../states/cart_state.dart';
///
/// part 'cart_notifier.g.dart';
///
/// @riverpod
/// class CartNotifier extends _$CartNotifier {
///   @override
///   Future<CartState> build() async {
///     final repo = ref.read(cartRepositoryProvider);
///     return repo.fetchCart();
///   }
///
///   Future<void> addItem(CartItem item) async {
///     final repo = ref.read(cartRepositoryProvider);
///     await repo.addItem(item);
///     ref.invalidateSelf();
///   }
///
///   Future<void> removeItem(String itemId) async {
///     final repo = ref.read(cartRepositoryProvider);
///     await repo.removeItem(itemId);
///     ref.invalidateSelf();
///   }
/// }
/// ```
///
/// ## Example output — cart_notifier_test.dart
///
/// ```dart
/// // GENERATED BY mogen_unit_tests — DO NOT EDIT
/// // ignore_for_file: lines_longer_than_80_chars
///
/// import 'package:flutter_riverpod/flutter_riverpod.dart';
/// import 'package:flutter_test/flutter_test.dart';
/// import 'package:mocktail/mocktail.dart';
///
/// import 'package:my_app/features/cart/presentation/notifiers/cart_notifier.dart';
/// import 'package:my_app/features/cart/presentation/states/cart_state.dart';
/// import 'package:my_app/features/cart/domain/repositories/cart_repository.dart';
/// /// import 'package:my_app/features/cart/data/repositories/cart_repository_impl.dart';
///
/// class MockCartRepository extends Mock implements CartRepository {}
///
/// class FakeCartItem extends Fake implements CartItem {}
///
/// void main() {
///   group('CartNotifier', () {
///     late MockCartRepository mockCartRepository;
///     late ProviderContainer container;
///
///     setUpAll(() {
///       registerFallbackValue(FakeCartItem());
///     });
///
///     setUp(() {
///       mockCartRepository = MockCartRepository();
///       container = ProviderContainer(
///         overrides: [
///           cartRepositoryProvider.overrideWithValue(mockCartRepository),
///         ],
///       );
///     });
///
///     tearDown(() {
///       container.dispose();
///     });
///
///     group('addItem', () {
///       test('addItem completes successfully', () async {
///         when(() => mockCartRepository.addItem(any()))
///             .thenAnswer((_) async => null);
///
///         final item = FakeCartItem();
///
///         await container.read(cartNotifierProvider.future);
///         await container.read(cartNotifierProvider.notifier).addItem(item);
///         final finalState = container.read(cartNotifierProvider);
///
///         expect(finalState.requireValue.error, isNull);
///         expect(finalState.requireValue.isLoadingAction, isFalse);
///       });
///     });
///
///     group('removeItem', () {
///       test('removeItem completes successfully', () async {
///         when(() => mockCartRepository.removeItem(any()))
///             .thenAnswer((_) async => null);
///
///         const itemId = '';
///
///         await container.read(cartNotifierProvider.future);
///         await container
///             .read(cartNotifierProvider.notifier)
///             .removeItem(itemId);
///
///         final finalState = container.read(cartNotifierProvider);
///
///         expect(finalState.requireValue.error, isNull);
///         expect(finalState.requireValue.isLoadingAction, isFalse);
///       });
///     });
///   });
/// }
/// ```

library;

void main() {
  print('Run `dart run mogen_unit_tests` from your Flutter project root.');
}
1
likes
160
points
250
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Scans Riverpod AsyncNotifier classes and auto-generates Mocktail unit tests.

Homepage
Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

analyzer, args, dart_style, glob, path, yaml

More

Packages that depend on mogen_unit_tests