如何测试电子邮件应用打开的颤抖url_launcher?

时间:2019-02-25 15:08:20

标签: flutter flutter-test

我确实有一个带有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?

  });
});

1 个答案:

答案 0 :(得分:2)

简短的回答:您不能。

使用 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui"> <h:panelGrid columns="1" cellpadding="5"> <p:commandButton value="Basic" type="button" onclick="PF('dlg1').show();" /> <p:commandButton value="Modal" type="button" onclick="PF('dlg2').show();" /> <p:commandButton value="Effects" type="button" onclick="PF('dlg3').show();" /> </h:panelGrid> <p:dialog header="Basic Dialog" widgetVar="dlg1" minHeight="40"> <h:outputText value="Resistance to PrimeFaces is futile!" /> </p:dialog> <p:dialog header="Modal Dialog" widgetVar="dlg2" modal="true" height="100"> <h:outputText value="This is a Modal Dialog." /> </p:dialog> <p:dialog header="Effects" widgetVar="dlg3" showEffect="explode" hideEffect="bounce" height="100"> <h:outputText value="This dialog has nice effects." /> </p:dialog> </html> 进行的启动由设备的操作系统处理,并且不在Flutter应用程序的上下文中。 由于flutter测试包专注于flutter应用程序,因此OS上发生的事情已无法实现。