Как модульное тестирование Segue с NavigationalController присутствует - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь написать тест, чтобы проверить, отклонен ли подарок presentModally или присутствует с помощью thenavigationController. MessageVC - модал, который я хочу проверить, присутствует ли он или отклонен. Однако после executeSegue topViewController не изменился на MessageVC.

Контроллер раскадровки контактов (ContactViewController):

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    switch segue.identifier {

    case "Message":
        let navigationController = segue.destination as! UINavigationController
        let messageVC = navigationController.topViewController as! MessageViewController

        // Set the modal view controller to be the delegate of the presentationController for this presentation,
        // so that modal view controller can respond to attempted dismissals
        navigationController.presentationController?.delegate = messageVC
    }

Тест :

var messageVC = MessageViewController()

override func setUp() {
    let storyboard = UIStoryboard(name: "Contact", bundle: Bundle.main)

    let navigationController = storyboard.instantiateInitialViewController() as! UINavigationController

    navigationController.topViewController.performSegue(withIdentifier: "Message", sender: self)
}

func testModalPresent() {
}

1 Ответ

1 голос
/ 29 октября 2019

Это, скорее всего, связано с тем, что вы вызываете асинхронное выполнение. Вероятно, даже не получится выполнить его до завершения теста.

При таком способе у вас действительно есть два варианта:

  1. Обновите свой тест с помощью XCTestасинхронное ожидание, позволяющее выполнить код и ожидающий ожидаемый результат.

  2. Переписать свой тест как тест пользовательского интерфейса.

Либо кто-то не собирается быть прямым и будет зависеть от ваших навыков относительно того, насколько хорошо это будет работать для вас. Однако оба метода стоит изучить, если вы их еще не знаете.

Тестовые ожидания помогут вам во многих асинхронных ситуациях - сетевой код, асинхронные API-интерфейсы, такие как обещания, реагирование и Apple Combine.

Тестирование пользовательского интерфейса поможет обеспечить работу вашего приложения в соответствии с ожиданиями. точка зрения пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...