Flutter - 如何正确地对 FutureBuilder 进行单元测试

问题描述

我正在尝试对 FutureBuilder 内的小部件进行单元测试,但我无法弄清楚。

我有一个小部件,它有一个 FutureBuilder 和一个构建器,当连接状态完成时,它返回一个 CameraPreview 小部件:

    body: FutureBuilder<void>(
      future: _initializeControllerFuture,builder: (context,snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          // If the Future is complete,display the preview.
          return CameraPreview(_controller);
        } else {
          // Otherwise,display a loading indicator.
          return const Center(child: CircularProgressIndicator());
        }
      },),

这是我如何创造未来:

  Future<void> _initializeControllerFuture;

  @override
  void initState() {
    super.initState();
    // To display the current output from the Camera,// create a CameraController.
    _controller = CameraController(
      // Get a specific camera from the list of available cameras.
      widget.camera,// Define the resolution to use.
      ResolutionPreset.medium,);

    // Next,initialize the controller. This returns a Future.
    _initializeControllerFuture = _controller.initialize();
  }

这是我的测试:

testWidgets('Camera preview is available',(WidgetTester tester) async {
  await _buildCameraScreenPage(tester);
  await tester.pump();

  expect(find.byType(CameraPreview),findsOneWidget,reason: 'Camera preview should be visible.');
});

我已经对其进行了调试,但 snapshot.connectionState 从未完成(总是在等待),因此它会跳过返回 CameraPreview 的行。我也试过 tester.pumpAndSettle() 但它超时了。

有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...