如何在小部件测试中使用 mockingjay 验证是否出现了警告对话框?

How do I verify an alert dialog has appeared using mockingjay in a widget test?

使用 mockingjay Flutter 包,我如何在小部件测试中验证是否在例如点击一个按钮?使用 showDialog 函数显示警告对话框。

这与验证页面导航行为非常相似,引起我注意的是 showDialog 函数必须将参数 useRootNavigator 设置为 false,如 example project 中所述。没有它,测试将无法检测到显示了警报对话框。

showDialog(
   context: context,
   useRootNavigator: false, // By default this is true, which won't work with Mockingjay
   routeSettings: RouteSettings(name: 'verify_checkout_failure'),
   builder: (context) {
       return AlertDialog(title: Text('Checkout failed'));
   });

那么在你的测试中:

await tester.tap(find.byType(PlaceOrderButton));

  verify(
    () => mockNavigator.push(
      any(
        that: isRoute<void>(
          whereName: equals('verify_checkout_failure'),
        ),
      ),
    ),
  );