Хорошо, я не очень знаком с AWS iOS SDK и с тем, как именно он реализует поток аутентификации, поэтому возьмем следующее с небольшим количеством соли.Это не полный ответ, а более общая «стратегия», я надеюсь.Я реализовал аналогичный подход в своем текущем проекте, не только для входа в систему, но фактически для всех удаленных подключений, которые я делаю.
Вам нужно сделать три вещи:
Запустите небольшой локальный веб-сервер внутри цели тестирования пользовательского интерфейса .Для этого я использую Embassy и Ambassador в моем текущем проекте.Настройте его так, чтобы он возвращал любой ответ, который обычно дает Cognito (или другая конечная точка).Я просто curl
отредактировал запрос вручную и где-то сохранил ответ, но в моем случае я получил простые данные (а не, например, полную страницу входа для отображения в веб-просмотре ...).Я предполагаю, что Cognito фактически отображает вид входа в систему (веб) и при успешном входе в систему использует глубокую ссылку, чтобы «вернуться» к вашему приложению, которая в конечном итоге вызывает ваши методы AWSCognitoIdentityPasswordAuthentication
(успех или ошибка).У вас может быть цель теста, то есть веб-сервер будет вызывать глубокую ссылку напрямую, если вы знаете, как она выглядит (что должно быть возможно выяснить?).
Добавьте некоторый механизм для переключенияконечная точка Cognito во время теста.К сожалению, это требует добавления производственного кода, но если все сделано правильно, это не должно быть слишком сложным.Я сделал это с помощью переменной среды запуска, которую я установил во время теста (см. Ниже).Если ваш веб-сервер не поддерживает https (Embassy не из коробки), это также требует некоторой настройки App Transport Security.Самым сложным является, конечно, выяснить, где в SDK создана эта конечная точка и как ее изменить.Беглый взгляд на документацию заставляет меня поверить, что webDomain
- это место, где он сохранен, но я не вижу, как он настроен.Это свойство доступно только для чтения, что усложняет ситуацию.Я предполагаю, однако, что вы можете изменить это в какой-то конфигурации в вашем проекте?В противном случае это будет похоже на случай метода метания ... Извините, я не могу предложить больше направления звука здесь.
Во время ваших тестов, убедитесь, что реальные конечные точки будут доступны во времясоответствующие потоки приложений переключаются на http://localhost/...
.Я сделал это с помощью XCUIApplication().launchEnvironment["somekey"] = "TESTINGKEY"
, что соответствовало моей подготовке производственного кода на втором шаге.В моем случае я мог просто загрузить разные конечные точки (у которых был домен localhost и в остальном те же пути, что и у исходных доменов).Настройте ответы вашего веб-сервера в соответствии с тестовым примером (успешный вход в систему, неверные учетные данные и т. Д.).
Я признаю, что это было / очень много работы, но для меня это стоило того, так как я мог легко запустить весь поток приложений (который включал много исходящих запросов) без каких-либодоступ к сети.В любом случае я должен был реализовать нашу систему аутентификации самостоятельно, что давало мне большой контроль над тем, какие URL-адреса использовались и где, что облегчало создание единого места для их блокировки в зависимости от переменной среды запуска.Самой уродливой частью в моем случае было включение исключений ATS только в моих тестах , для которых мне пришлось использовать скрипт запуска по разным причинам.