3

我有一个包含流的块对象:

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) 时抛出了以下断言:尝试使用具有 Listenable/Stream (Bloc) 子类型的 Provider。

这可能是一个错误,因为 Provider 不会在 Bloc 更新时自动更新依赖项。相反,请考虑将 Provider 更改为处理更新机制的更具体的实现,例如:

  • ListenableProvider
  • ChangeNotifierProvider
  • ValueListenableProvider
  • 流提供者

该应用程序运行正常,但测试失败,有什么帮助吗?

4

1 回答 1

0

这里的问题是由您尝试在MultiProvider.providers. 如日志中所述,您可能需要考虑将 Provider 更改为更具体的实现。

考虑将提供程序修改为ListenableProvider并查看它是否适合您的用例。

MultiProvider(
  providers: [
    ListenableProvider<Bloc>.value(value: bloc)
  ],
  ...
)
于 2021-12-29T04:33:28.870 回答