Давайте рассмотрим шаги:
testShowSignIn
вызовы coordinator.showSignIn()
, где coordinator
- это AppCoordinator
. showSignIn()
создает экземпляр SignInCoordinator
, и устанавливает его делегатом экземпляр AppCoordinator
.
Теперь мы достигли важной части:
- Мы достигли конца
showSignIn()
. SignInCoordinator
выходит из области видимости, поэтому Swift уничтожает его.
Ничто не поддерживает ссылку на SignInCoordinator
. Но вы хотите проверить взаимодействие между AppCoordinator
и SignInCoordinator
. Код борется с вами, потому что AppCoordinator
решает самостоятельно создавать и уничтожать SignInCoordinator
.
Вы можете проверить его, изменив дизайн. У вас есть пара опций.
Опция 1: Измените AppCoordinator
, чтобы иметь вычисленное свойство с отложенным вычислением, которое возвращает SignInCoordinator
. Это может сработать, если вы согласны с этим дизайном. Тогда SignInCoordinator
продолжит жить, так что тест может запросить его. Это улучшает тестируемость AppCoordinator
, выставляя SignInCoordinator
.
Вариант 2: Попросите тест создать SignInCoordinator
и передать его в как аргумент showSignIn()
. Тогда жизненный цикл SignInCoordinator
будет полностью управляться за пределами AppCoordinator
.