dart_test_extensions 0.1.0
dart_test_extensions: ^0.1.0 copied to clipboard
Dart test extensions for cleaner, more expressive tests — ChangeNotifier state capture, mockito sugar, stream helpers, and widget test utilities.
// ignore_for_file: unused_local_variable
/// Example usage of dart_test_extensions.
///
/// Import the barrel that matches your needs:
/// ```dart
/// import 'package:dart_test_extensions/dart_test_extensions.dart'; // core
/// import 'package:dart_test_extensions/mockito.dart'; // mockito sugar
/// ```
///
/// ChangeNotifier state capture:
/// ```dart
/// final states = viewModel.capture((vm) => vm.state);
/// await viewModel.load();
/// states.shouldTransition([isA<Loading>(), isA<Loaded>()]);
/// ```
///
/// Notification counting:
/// ```dart
/// final counter = viewModel.count();
/// await viewModel.doSomething();
/// counter.shouldBe(2);
/// ```
///
/// Mockito sugar:
/// ```dart
/// when(service.fetchData('id')).thenReturnAsync('result');
/// when(service.fetchStream()).thenEmit([1, 2, 3]);
/// final arg = verify(service.process(captureAny)).capturedAs<String>();
/// ```
///
/// Widget test sugar:
/// ```dart
/// testWidgets('renders', (tester) async {
/// await tester.pumpScaffold(const MyWidget());
/// find.text('Hello').shouldExist();
/// await tester.tapAndSettle(find.byType(ElevatedButton));
/// });
/// ```
///
/// Stream testing:
/// ```dart
/// final effects = await stream.collectDuring(() async {
/// await viewModel.performAction();
/// });
/// expect(effects, [MyEffect.saved]);
/// ```
library;
import 'package:dart_test_extensions/dart_test_extensions.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';
/// A minimal ChangeNotifier to demonstrate capture and count extensions.
class Counter extends ChangeNotifier {
int _value = 0;
int get value => _value;
void increment() {
_value++;
notifyListeners();
}
}
void main() {
test('capture records state transitions', () {
final counter = Counter();
final values = counter.capture((c) => c.value);
counter.increment();
counter.increment();
values.shouldEqual([1, 2]);
});
test('count tracks notification count', () {
final counter = Counter();
final notifications = counter.count();
counter.increment();
counter.increment();
counter.increment();
notifications.shouldBe(3);
});
}