#swift #swift3 #nsurlsession #xctest #xctestexpectation
#swift #swift3 #nsurlsession #xctest #xctestexpectation
Вопрос:
Пытаюсь запустить следующий тест. Она никогда не попадает в блок завершения, а вместо этого время ожидания истекает через 30 секунд. Похоже, что запрос никогда не выполняется, поскольку я не вижу его на Charles.
func testAsynchronousURLConnection() {
let url = URL(string: "https://jsonplaceholder.typicode.com/posts/1")!
let exp = expectation(description: "Async request")
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "GET"
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
let task = URLSession.shared.dataTask(with: urlRequest) { data, response, error in
XCTAssertNotNil(data, "data should not be nil")
XCTAssertNil(error, "error should be nil")
exp.fulfill()
}
task.resume()
waitForExpectations(timeout: 30) { error in
if let error = error {
print("Error: (error)")
}
}
}
Тест завершается с ошибкой:
Сбой асинхронного ожидания: превышен тайм-аут в 30 секунд с невыполненными ожиданиями: «Асинхронный запрос»
Где я ошибаюсь?
Комментарии:
1. Если вы исключите Чарльза из уравнения, увидите ли вы такое же поведение? Интересно, есть ли что-то странное в настройках прокси-сервера SSL (например, ожидание какого-либо подтверждения сертификата или что-то странное в этом роде). Сказав это, я бы все равно ожидал, что она завершится успешно или завершится неудачей немедленно. Я использую Charles для просмотра этого, и это работает нормально…
2. Да, я только что закрыл Charles и создал новый проект. Скопируйте и вставьте тест, он работает там, но не в моем существующем проекте. Абсолютно не понимаю, что может содержать мой существующий проект, который его блокирует.