Тестирование аутентификации без пароля в лаборатории тестирования Firebase для iOS - PullRequest
3 голосов
/ 03 апреля 2019

Я пытаюсь выяснить, как выполнить тест e2e с помощью лаборатории тестирования firebase для iOS, которая позволяет проверять поток аутентификации без пароля, который по существу должен выполнять следующие действия:

  1. Вводит электронную почту в моем приложении
  2. Firebase отправляет ссылку на такую ​​электронную почту
  3. Каким-то образом мне нужно войти в такую ​​электронную почту где-нибудь в тестовом устройстве firebases, я полагаю, либо в почтовом приложении, либо в gmail?
  4. Мне нужно знать, когда приходит новое письмо, и открыть его.
  5. После того, как я открыл электронное письмо, мне нужно нажать на ссылку авторизации
  6. Это должно вернуть меня в приложение и аутентифицировать

Моя самая большая проблема на данный момент - это выяснение шагов, которые происходят за пределами моего приложения, т.е. как я могу подготовиться к этому тесту и войти под своим адресом электронной почты (например, лучше войти в gmail в safari или как-то добавить этот к яблочному почтовому приложению?).

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Я думаю, вы должны сначала взглянуть на документацию Firebase для iOS о том, как создавать динамические ссылки, которые вы можете использовать для аутентификации электронной почты.

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, открытый URL: URL, sourceApplication: String ?, аннотация: любая) -> используется Bool

в AppDelegateдля всех глубоких ссылок в приложение.Например, вы можете создать собственную схему, которой будет соответствовать ваше приложение.И вы можете отправлять ссылки типа URL с вашей пользовательской схемой в приложение, например, из браузера.

Чтобы сделать это, просто откройте Xcode, перейдите в «Настройки проекта» -> «Информация» и добавьте в раздел «Типы URL»новая схема URL.Добавьте что-то вроде com.myApp, чтобы оно было как можно более единообразным.Затем вы можете просто набрать в браузере com.myApp: // main и обработать это в appDelegate.

Редактировать: в их документах говорится, что вы можете представить подсказку внутри приложения для ввода пользователемэлектронная почта.Откуда пользователь открывает свою электронную почту, на самом деле вас не волнует, если ваша динамическая ссылка настроена правильно.

0 голосов
/ 05 апреля 2019

Тестирование электронной почты

По моему опыту, тестирование собственного кода на предмет того, было ли отправлено электронное письмо, не так просто, как проверка того, произошел ли вызов метода, который вы ожидаете отправить по электронной почте.

Добавьте к этому еще и использование 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

...