I have a test testing for the initial state of a controller. It keeps failing saying no matching calls, but my other controller tests using the same code are fine (the difference is they have an AsyncValue type of void and a null default value whereas this is a list with an empty list default value, can someone please help? My test and controller code are below. The test finds 1 call which matches the same types as what I verify but for some reason, it just won't accept it. My test code is below:
test('initial state is AsyncValue.data', () async {
// assert
var service = MockSpaceService();
var container = makeProviderContainer(service);
var listener = Listener<AsyncValue<List<Space>>>();
container.listen(spaceListControllerProvider, listener.call,
fireImmediately: true);
verify(
() => listener(null, const AsyncData<List<Space>>([])),
);
verifyNoMoreInteractions(listener);
});
@riverpod
class SpaceListController extends _$SpaceListController {
@override
FutureOr<List<Space>> build() => [];
}
No matching calls. All calls: Listener<AsyncValue<List<Space>>>.call(null, AsyncData<List<Space>>(value: []))
(If you called `verify(...).called(0);`, please instead use `verifyNever(...);`.)
package:matcher fail
package:mocktail/src/mocktail.dart 728:7 _VerifyCall._checkWith
package:mocktail/src/mocktail.dart 519:18 _makeVerify.<fn>
test\features\spaces\presentation\space_list_controller_test.dart 58:13 main.<fn>.<fn>
It is because [] != []
and const [] != []
This should solve the issue:
@riverpod
class SpaceListController extends _$SpaceListController {
@override
FutureOr<List<Space>> build() => const [];
}