Как предварительно сформировать задержку в Xcode, объединяет, не блокируя основной поток? - PullRequest
1 голос
/ 21 мая 2019

У меня есть тест, в котором я должен сделать REST-запрос к серверу, и только после того, как этот звонок получен, я могу продолжить остальные тесты, Я не могу использовать sleep(x), так как он заблокирует основной поток и не позволит выполнить остальной вызов.

Вот пример кода, чтобы лучше объяснить:

let homeInteractor: HomeInteractor = HomeInteractor ()
homeInteractor.initSDK()

//// <<<<< DO A DELEY HERE FOR 5 SECONDS
//sleep(5) < CANNOT USE SLEEP AS IT WILL BLOCK THE MAIN THREAD

let loginInteractor: LoginInteractor = LoginInteractor ()
let loginViewController: LoginTableViewController = LoginTableViewController ()
let loginPresenter: LoginPresenter = LoginPresenter(controller: loginViewController)

loginPresenter.onLoginButtonPressed(usernameText: "username", passwordText: "password")

waitForExpectations(timeout: 10)

 XCTAssertEqual(loginPresenter.didUserLogin, true)

Как можно добиться такой задержки?

1 Ответ

1 голос
/ 21 мая 2019

Попробуйте это:

// The code you didn't know when will finish
let homeInteractor: HomeInteractor = HomeInteractor ()
homeInteractor.initSDK()

// The time you guess it needs
let delay: TimeInterval = 5
let expectation = XCTestExpectation()

// Rest of the code after that delay
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {

    let loginInteractor: LoginInteractor = LoginInteractor ()
    let loginViewController: LoginTableViewController = LoginTableViewController ()
    let loginPresenter: LoginPresenter = LoginPresenter(controller: loginViewController)

    loginPresenter.onLoginButtonPressed(usernameText: "username", passwordText: "password")

    // fulfil expectations
    XCTAssertEqual(loginPresenter.didUserLogin, true)
    if loginPresenter.didUserLogin {
        expectation.fulfill()
    }
}

// Wait for it
wait(for: [expectation], timeout: delay)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...