easy_mock_channel 0.1.1 copy "easy_mock_channel: ^0.1.1" to clipboard
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 with returns, or throw throws (e.g. a PlatformException). Supply arguments to match only calls whose arguments deep-equal it; omit it to match any. Later stubs win.
  • verify({required method}) returns the recorded MethodCalls for that method; calls is the full ordered list.

return is a reserved word in Dart, so the parameter is named returns.

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 call TestWidgetsFlutterBinding.ensureInitialized() in a plain test).
  • VM/widget tests only — it mocks the channel, it does not talk to a device.
0
likes
140
points
334
downloads

Documentation

API reference

Publisher

verified publisherahmedomar.com.ly

Weekly Downloads

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 on teardown. Also ships a guard that fails a test when the app calls an unmocked platform channel, naming the channel, method, and call site instead of hanging.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, flutter_test, stack_trace

More

Packages that depend on easy_mock_channel