我有一个类似于以下的小部件测试:
testWidgets('Widget test', (WidgetTester tester) async {
provideMockedNetworkImages(() async {
final widget = MyWidget();
await WidgetTestFunctions.pumpWidgetTest(
tester,
widget,
);
// ....
await tester.tap(find.byType(MyWidget));
await tester.pump(new Duration(milliseconds: 3000));
// ....
expect(widget.value, myValue);
});
});
以下是该小部件 on-tap 方法的实现:
_onButtonPressed() async {
await animationController.forward();
setState(() {
// ...
// Calls method that changes the widget value.
});
}
我遇到的问题是,在测试中调用
animationController.forward()
方法后,setState
部分没有执行。我应该如何等待此方法正确完成?在应用程序运行时,代码的这部分被正确地调用。似乎
await tester.pump(new Duration(milliseconds: 3000));
不起作用,因为动画的持续时间为1500毫秒,而你可以看到pump持续时间是双倍。
await tester.tap(find.byType(MyWidget)); await tester.pump(new Duration(milliseconds: 3000));
- SilkeNLAnimationController.forward
调用后无法找到小部件。 我通过给要测试的小部件分配一个ValueKey
并使用该键来验证信息来“修复”此问题。 尽管如此,这不是一个解决方案,而更像是一种 hack。 - hman_codes