【发布时间】:2021-07-25 10:32:22
【问题描述】:
我正在尝试在我的应用程序中测试剪贴板功能。当我按下按钮时,它应该将我的文本复制到剪贴板。当我尝试使用小部件测试来测试此功能时,返回的未来没有得到解决。有没有办法模拟 Clipboard.setData 方法?
由于我的原始代码非常大,我做了一个可重现的小部件测试,但也遇到了同样的问题。当我执行 expect() 时,布尔 dataCopied 为 false。
testWidgets('test clipboard function', (WidgetTester tester) async {
var dataCopied = false;
await tester.pumpWidget(
MaterialApp(
home: Container(
width: 10,
height: 10,
child: ElevatedButton(
onPressed: (() {
Clipboard.setData(ClipboardData(text: "test")).then((_) {
dataCopied = true;
});
}),
child: Text("Copy Text"),
),
),
),
);
await tester.tap(find.byType(ElevatedButton));
expect(dataCopied, true);
});
【问题讨论】:
-
我认为问题是 onPress 在调用 onPress 内部的
then之前返回。在等待数据复制之前,您可能需要等待几毫秒。 -
你可以使用 await 或 then 但结果是一样的
-
是的。我明白。
await tester.tap不会等待 onPress 完成。它等待点击操作发生。所以你需要在tester.tap和expect之间提供一些延迟。 -
我使用了 tester.pump(),持续时间为 10 秒,但未来不会触发
-
可能在两行之间添加
await Future.delayed(Duration(milliseconds: 100));。
标签: flutter dart mockito widget-test-flutter