У меня есть тестовое тестирование начального состояния контроллера. Он постоянно терпит неудачу, говоря, что нет соответствующих вызовов, но другие мои тесты контроллера, использующие тот же код, в порядке (разница в том, что они имеют тип AsyncValue void и нулевое значение по умолчанию, тогда как это список с пустым значением списка по умолчанию, может кто-нибудь, пожалуйста Помогите? Мой тест и код контроллера приведены ниже. Тест находит 1 вызов, который соответствует тем же типам, что и тот, который я проверяю, но по какой-то причине он просто не принимает его. Мой тестовый код приведен ниже:
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>
Это потому что [] != []
и const [] != []
Это должно решить проблему:
@riverpod
class SpaceListController extends _$SpaceListController {
@override
FutureOr<List<Space>> build() => const [];
}
спасибо, это было очень ясно, и решение работает как шарм!