我正在尝试使用测试Flutter lib在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语句产生输出。我很确定它与async
有关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()
方法中图像上的监听器没有同步完成。仍然不确定如何解决它。
答案 0 :(得分:0)
根据我对此主题所做的研究,抖动测试支持等待异步方法调用,但不支持等待异步回调。
点击按钮时,操作立即完成,然后按钮触发他的回调并导致异步暂停,因为测试仪已经在下一行,但回调尚未完成。