easy_mock_channel 0.1.1
easy_mock_channel: ^0.1.1 copied to clipboard
Fluent MethodChannel mocking for Flutter tests. Stub platform-channel calls with when, match arguments by deep equality, and assert with verify — the mock handler installs immediately and is removed o [...]
easy_mock_channel #
Fluent MethodChannel mocking for Flutter tests — the same when / verify
ergonomics as a request mock, but for platform channels. It stubs the channel at
the binary-messenger seam (setMockMethodCallHandler), so the real plugin Dart
code runs and only the native side is faked.
Usage #
import 'package:easy_mock_channel/easy_mock_channel.dart';
testWidgets('camera permission is denied', (tester) async {
final channel = mockChannel('flutter.baseflow.com/permissions/methods')
..when(method: 'requestPermissions', returns: {1: 0}); // {camera: denied}
// ... drive the code under test that calls Permission.camera.request() ...
expect(channel.verify(method: 'requestPermissions').length, 1);
});
mockChannel(name)installs the handler immediately and removes it on test teardown. Calling it again with the same name returns the existing mock, preserving its stubs and call history. Each test starts fresh.when({required method, arguments, returns, throws})— reply withreturns, or throwthrows(e.g. aPlatformException). Supplyargumentsto match only calls whoseargumentsdeep-equal it; omit it to match any. Later stubs win.verify({required method})returns the recordedMethodCalls for that method;callsis the full ordered list.
returnis a reserved word in Dart, so the parameter is namedreturns.
You can configure and inspect the same channel from different helpers:
mockChannel('example/settings').when(method: 'theme', returns: 'dark');
mockChannel('example/settings').when(method: 'language', returns: 'en');
// Both stubs remain active. Looking up the channel does not reset it.
final channel = mockChannel('example/settings');
expect(channel.verify(method: 'theme').length, 0);
The first call selects the channel's codec. Later lookups retain that codec,
so a channel initially installed with codec: const JSONMethodCodec() can be
looked up again with just mockChannel(name).
Notes #
- Requires the Flutter test binding (use inside
testWidgets, or callTestWidgetsFlutterBinding.ensureInitialized()in a plaintest). - VM/widget tests only — it mocks the channel, it does not talk to a device.