Flutter: ошибка поставщика при имитации потока в Mock
У меня есть объект блока, который содержит поток:
Bloc {
final _controller = StreamController<MainEvents>.broadcast();
Stream<MainEvents> get stream => _controller.stream;
}
Я пытаюсь смоделировать этот объект, чтобы выполнить еще один тест с использованием Mockito:
Bloc bloc = Bloc();
final _controller = StreamController<MainEvents>.broadcast();
when(mainBloc.stream).thenAnswer((_) => _controller.stream);
Затем я создаю тестовый виджет, предоставляющий этот блок через пакет провайдера:
testWidget = MultiProvider(
providers: [
Provider<Bloc>.value(value: bloc)
],
child: Something(),
);
Но когда я выполняю тест, конструкция этого провайдера завершается с ошибкой:
Следующее утверждение было брошено сборкой Provider(dirty, state: _DelegateWidgetState#9ee17): пытался использовать Provider с подтипом Listenable/Stream (Bloc).
Вероятно, это ошибка, так как поставщик обновляет блоки автоматически при обновлении блока. Вместо этого рассмотрите возможность изменения Provider для более конкретной реализации, которая обрабатывает механизм обновления, такой как:
- ListenableProvider
- ChangeNotifierProvider
- ValueListenableProvider
- StreamProvider
Приложение работает нормально, но тест не проходит, какая-нибудь помощь?
1 ответ
Проблема здесь была вызвана провайдером, который вы пытаетесь использовать на
MultiProvider.providers
. Как указано в журналах, вам может потребоваться рассмотреть возможность изменения поставщика на более конкретную реализацию.
Рассмотрите возможность изменения провайдера на
ListenableProvider
и посмотрите, подходит ли он для вашего варианта использования.
MultiProvider(
providers: [
ListenableProvider<Bloc>.value(value: bloc)
],
...
)