【问题标题】:Flutter async callback testingFlutter 异步回调测试
【发布时间】:2018-03-31 14:22:55
【问题描述】:

我正在尝试使用测试 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)");
  }

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

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()方法中图片上的监听器没有同步完成。但仍不确定如何修复它。

【问题讨论】:

  • 我认为在可能相关的测试中提供资产是一个悬而未决的问题
  • 补充 Günter 所说的,如果您有一个小项目可以复制该问题,请考虑在 Flutter 存储库 (github.com/flutter/flutter) 上发布问题。

标签: dart flutter


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多