flutter - 如何测试电子邮件应用程序打开的颤振 url_launcher?
问题描述
我确实有一个带有 SnackbarAction 的 Snackbar,它应该打开带有默认主题和正文的默认电子邮件应用程序。我想知道是否有可能通过某些单元测试验证这是否真的发生。
我的 Snackbar 代码如下所示:
SnackBar get snackbar =>
SnackBar(
content: Text(message),
action: SnackBarAction(
key: const Key('ErrorSnackbarAction'),
label: AppLocalizations
.of(_context)
.report,
onPressed: () async => await launch('mailto:test@test.com?subject=TestSubject&body=TestBody')));
我已经在验证外观是否正常:
group('ErrorSnackbar', () {
testWidgets('appearance test', (WidgetTester tester) async {
await tester.pumpWidget(_generateSnackbarApp());
await _showSnackbar(tester);
expect(find.text(userMessage), findsOneWidget);
expect(find.byWidgetPredicate((Widget widget) =>
widget is SnackBarAction && widget.label == 'Report'), findsOneWidget);
});
testWidgets('error report test', (WidgetTester tester) async {
await tester.pumpWidget(_generateSnackbarApp());
await _showSnackbar(tester);
tester.tap(find.byKey(errorSnackbarAction));
await tester.pump();
// how to verify that the default email app was opened
// with expected subject and body?
});
});
解决方案
简短的回答:你不能。
启动mailto
由设备的操作系统处理,不属于颤振应用程序的上下文。由于 Flutter 测试包专注于 Flutter 应用程序,因此在 OS 上发生的事情是遥不可及的。
推荐阅读
- python - (BAD_COLUMN_NAME):字形指的是不存在的列名,散景
- loops - 如何使用嵌套的 for 循环来增加单个变量中的值并随时间移动到下一个
- javascript - 为什么 django 上的“关注”按钮不起作用?
- android - 使用直接标记化的 Google Pay 付款集成
- python - 使用 csv 文件从考勤日志报告中过滤时间
- python - 启动 VSCode 时自动激活 conda 环境
- python - 如何过滤数据库表行并更新 django 中的特定列?
- javascript - Bootstrap4:卡片标题和导航在一行
- asp.net-core - ASP.Net Core - Toast 通知未显示在已部署的应用程序上
- java - 是否可以使用 Citrus-Framwork 将 http-response 的内容类型作为字符串获取?