получение вывода из URLSession в XCUITest

Я пытаюсь получить значение из URL-адреса внутри теста XCUI. Однако он не выводится, поэтому я не уверен, что я должен что-то делать, кроме того, что я уже пробовал в приведенном ниже коде:

import XCTest

class ExampleUITests: XCTestCase {


func testExample() {
    print("We are in XCUITest textExample right now")

    let urlString = "https://api.ipify.org/"
    guard let url = URL(string: urlString) else { return }

    URLSession.shared.dataTask(with: url) { (data, response, error) in
        if error != nil {
            print(error!.localizedDescription)
        }

        guard let data = data
            else {
                print("error found in data")
                return
        }

        print("*******")
        let outputStr  = String(data: data, encoding: String.Encoding.utf8) as String!
        print (outputStr)

        }.resume()

}

}

person hnaderi    schedule 25.06.2018    source источник
comment
Я попытался добавить блок завершения, как указано в этом вопросе .com/questions/40810108/, но это все еще не дало мне никакого результата   -  person hnaderi    schedule 25.06.2018


Ответы (1)


Проблема в том, что ответ от сервера возвращается после завершения теста. Вы должны добавить ожидание ответа сети в тесте.

В начале теста добавьте:

let expectation = expectationWithDescription("")

В конце теста добавить:

waitForExpectationsWithTimeout(5.0) { (error) in
    if error != nil {
        XCTFail(error.localizedDescription)
    }
}

И в блоке завершения сети добавить:

expectation.fulfill()

Вы можете получить больше информации об ожидании асинхронной задачи в тесте, например, здесь Как заставить XCTest ожидать асинхронных вызовов в setUp перед запуском тестов?.

person Kryštof Matěj    schedule 25.06.2018