dart - Flutter 异步回调测试

标签 dart flutter

我正在尝试使用测试 Flutter 库测试 Flutter 中的按钮。我使用以下代码进行测试:

await tester.tap(find.widgetWithText(GestureDetector, "ref size"));
expect(testContainerState.childWidth, 200.0);

点击按钮时,会调用以下函数:

  void setToRefSize() async {
    print("SETTING REF SIZE (0)");
    ui.Image img = await widget.referenceImages[referenceImageIndex].getImageData();
    print("SETTING REF SIZE (1)");
  }

但由于某些原因,只有第一个 print 语句产生输出。我很确定这与异步有关

ui.Image img = await widget.referenceImages[referenceImageIndex].getImageData();

getImageData()方法定义如下:

  Future<ui.Image> getImageData() async {
    Completer<ui.Image> completer = new Completer<ui.Image>();
    image
      .resolve(new ImageConfiguration())
      .addListener((ImageInfo info, bool _) => completer.complete(info.image));
    return completer.future;
  }

奇怪的是,所有这些在手动测试按钮时都能正常工作,所以只需在设备上运行它并自己点击按钮即可。

编辑 再看一下,问题可能是getImageData()方法中对图片的监听没有同步完成。仍然不确定如何修复它。

最佳答案

根据我对这个主题所做的研究,flutter 测试支持等待异步方法调用但不支持等待异步回调。

当你点击按钮时, Action 立即完成,然后按钮触发他的回调并导致异步暂停,因为测试人员已经在下一行,但回调尚未完成。

关于dart - Flutter 异步回调测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49588771/

相关文章:

function - Dart匿名功能混淆

flutter - 我应用了debugshowcheckedmodebanner:false,但仍然在每个屏幕上显示调试标记

dart - Flutter:仅使用联系人选择器返回联系人号码

firebase - Flutter Firebase 云函数 : The data couldn’t be read because it isn’t in the correct format

flutter - 如何在 Firebase 主机上托管 Flutter Web(蜂鸟)

flutter - cupertino_localizations 1.0.0 + 1取决于国际^ 0.15.8

flutter - 如何在 flutter 中将视频从模拟器内部存储加载到视频播放器

api - 在Flutter中如何使用“Multi Image Picker”选择图像后如何获取图像路径?

animation - 动画不透明度并隐藏小部件,使其不可点击

firebase - 如何在 Flutter 中不使用 FutureBuilder 或 StreamBuilder 从 Firebase 获取单个数据