在iOS版Firebase测试实验室中测试无密码身份验证

时间:2019-04-03 16:25:18

标签: ios firebase testing firebase-authentication firebase-test-lab

我正在尝试弄清楚如何通过iOS的Firebase测试实验室执行e2e测试,该检查可以检查无密码身份验证流,该操作基本上应该遵循

  1. 在我的应用中输入电子邮件
  2. Firebase将身份验证链接发送到此类电子邮件
  3. 我是否需要在Firebases测试设备的某处登录此类电子邮件,我认为是在邮件应用程序中还是在gmail中?
  4. 我需要知道何时收到新电子邮件并打开它
  5. 打开电子邮件后,我需要单击身份验证链接
  6. 这应该使我重新进入应用程序并进行身份验证

目前,我最大的问题是弄清楚应用程序外部发生的步骤,即如何准备该测试并在我的电子邮件地址下登录(例如,最好在Safari中登录gmail或以某种方式添加此acc到苹果邮件应用程序?)。

2 个答案:

答案 0 :(得分:-2)

测试电子邮件

根据我的经验,测试您自己的代码以查看是否已发送电子邮件,不仅要检查您希望发送电子邮件的方法调用是否发生,还不那么简单。

在使用Firebase的基础上添加该功能,它不公开其底层电子邮件发送代码,这对我来说似乎是一个挑战。

在测试方面,我建议您断言您发送电子邮件的方法调用已发生,或者已到达相关的代码路径。在Firebase网站中,这看起来像:

firebase.auth().sendSignInLinkToEmail(email, actionCodeSettings)
  .then(function() {
    // The link was successfully sent. Inform the user.
    // Save the email locally so you don't need to ask the user for it again
    // if they open the link on the same device.
    window.localStorage.setItem('emailForSignIn', email);
    // TODO save email to something accessible in your iOS tests
    // TODO In your tests, confirm that email was saved after it was sent
  })
  .catch(function(error) {
    // Some error occurred, you can inspect the code: error.code
  });

请参阅:https://firebase.google.com/docs/auth/web/email-link-auth#send_an_authentication_link_to_the_users_email_address

另一个选项:

您可以在您管理的邮件服务器上使用电子邮件地址设置测试用户,并使用您自己的自定义邮件阅读代码检查该测试用户的传入邮件。

我将为此使用Firebase管理工具:https://firebase.google.com/docs/auth/admin/manage-users#create_a_user

答案 1 :(得分:-2)

我认为您应该首先查看iOS的Firebase文档,了解如何创建可用于电子邮件身份验证的动态链接。

https://firebase.google.com/docs/auth/ios/email-link-auth https://firebase.google.com/docs/auth/ios/passing-state-in-email-actions#configuring_firebase_dynamic_links

完成这两个操作后,请检查以下代码:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
   // [END old_delegate]
   if handlePasswordlessSignIn(withURL: url) {
     return true
   }
}

func handlePasswordlessSignIn(withURL url: URL) -> Bool {
    let link = url.absoluteString
    // [START is_signin_link]
    if Auth.auth().isSignIn(withEmailLink: link) {
      // [END is_signin_link]
      UserDefaults.standard.set(link, forKey: "Link")
      (window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: false)
      window?.rootViewController?.children[0].performSegue(withIdentifier: "passwordless", sender: nil)
      return true
    }
    return false
 }

这只是一个示例,说明用户点击链接后如何处理应用中的深层链接。委托方法

  

func application(_ application:UIApplication,open url:URL,   sourceApplication:字符串?,注释:任何)->布尔

AppDelegate中的

用于进入应用程序的所有深层链接。例如,您可以设置自己的应用程序要遵循的方案。例如,您可以将具有自定义方案的网址类型链接从浏览器发送到您的应用中。

要执行此操作,只需打开Xcode,请转到“项目设置”->“信息”,然后在“ URL类型”部分内添加新的URL方案。添加某种com.myApp,以使其尽可能地被选中。然后,您可以输入浏览器com.myApp:// main并在appDelegate中进行处理。

编辑:如此说来,您可以在他们的文档中在应用程序内显示提示,以供用户输入电子邮件。只要您正确设置了动态链接,用户从中打开电子邮件的地方就不是您真正关心的问题。