【发布时间】:2020-01-01 14:15:25
【问题描述】:
我有一个包含流的块对象:
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);
然后我构建一个测试小部件,通过provider 包提供这个块:
testWidget = MultiProvider(
providers: [
Provider<Bloc>.value(value: bloc)
],
child: Something(),
);
但是当我执行测试时,这个提供者构造失败并出现错误:
在构建 Provider(dirty, 状态: _DelegateWidgetState#9ee17): 尝试使用带有 Listenable/Stream (Bloc) 子类型的 Provider。
这可能是一个错误,因为 Provider 不会自动更新 Bloc 更新时的依赖项。相反,请考虑更改 Provider 对于处理更新机制的更具体的实现, 如:
- ListenableProvider
- ChangeNotifierProvider
- ValueListenableProvider
- 流提供者
应用运行正常,但测试失败,有什么帮助吗?
【问题讨论】:
-
您提供的 BLoC 实现不是真实的,您提供的代码中没有任何内容会导致问题
-
@RémiRousselet 为什么你说 bloc 实现不是真正的?
-
相关。异常表明您的 BLoC 类是流/可侦听的,但您的代码 sn-p 另有说明
-
这很重要。因为当您的 sn-p 另有说明时,异常表明您的 Bloc 类是流/可监听的