Модульный тест Асинхронное ожидание не выполнено: Превышено время ожидания Swift - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь выполнить модульный тест для моего приложения, и большинство тестов не пройдены, и причина, по которой он указан, Асинхронное ожидание не выполнено: Превышено время ожидания 30 секунд с невыполненными ожиданиями: «Домашний код».

Я не знаю, почему это так не получается, но это мой код ниже

class HomeTest: XCTestCase {

    override func setUp() {
    }

    override func tearDown() {
    }

    func testHome() {
        let expec = expectation(description: "Home Code")
        let presenter =  HomePresenter(view: HomeTestVC(expectation: expec), source: Repository.instance)
        presenter.start()
        wait(for: [expec], timeout: 30)
    }

    func testPerformanceExample() {
        self.measure {
        }
    }

}


class HomeTestVC: HomeContract.View {
    func showRatingForLastTrip(_ trip: Trip) {}

    func setProgress(enabled: Bool) {}

    func didFail(message: String) {}

    func didShowError(error: Error) {}

    func didShowStatusCode(code: Int?) {
        XCTAssertGreaterThan(200, code ?? 0)
        self.expec.fulfill()
    }

    var expec: XCTestExpectation
    init(expectation: XCTestExpectation) {
        self.expec = expectation
    }
} 

Он выскакивает из симулятора, но остается только на первом экране. Я не знаю почему. Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вам нужно fulfill ожидание.Как это:

let expectation = self.expectation(description: "Alert")

DispatchQueue.main.asyncAfter(deadline: .now() + 3.0, execute: {

    expectation.fulfill()
})

waitForExpectations(timeout: 5, handler: nil)

XCTAssert(whatever)

0 голосов
/ 17 января 2019

Вы не оправдываете ваши ожидания

func testExample() {
    let expec = expectation(description: "Home Code")
    someAsyncTask() { _ in 
       expectation.fulfill()
    }
    wait(for: [expec], timeout: 30)
}

См. Тестирование асинхронных операций с ожиданиями.

Примечания:

  • Не передавайте специальный код модульного теста производственному коду, как вы сейчас.
  • Загрузка VC не является асинхронной задачей. так что не нужно ожидание
  • Вероятно, вам не следует загружать класс Home напрямую, особенно если он вызывает некоторую асинхронную задачу. Вы должны посмотреть на отдельное тестирование асинхронных деталей и использование Mocks / Stubs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...