Я сейчас пробую метод заглушки моих сетевых запросов без необходимости имитировать URLSession
с помощью URLProtocol
.
Пока что он работает довольно хорошо и работает позвонив по номеру self.client?.urlProtocol(_ URLProtocol, didLoad: Data)
. Однако я не могу передать nil
, поэтому я могу проверить, как мой сетевой класс обрабатывает отправку успешного ответа без данных (например, кода HTTP 204). По умолчанию URLProtocol возвращает пустой объект Data
, а не nil, поэтому мне кажется, что это то, что мне нужно установить вручную.
Есть ли способ вернуть успешный ответ с нулевыми данными с использованием подкласса URLProtocol? После поиска в документации я не могу найти ничего, что выскакивает, хотя кажется, что это возможно.
URLProtocolStub
// Custom URLProtocol to be used in place of Apple's HTTP protocols when
// testing network code
class URLProtocolStub: URLProtocol {
static var testURLs = [URL?: Data]()
override class func canInit(with request: URLRequest) -> Bool {
return true
}
override class func canonicalRequest(for request: URLRequest) -> URLRequest {
return request
}
override func startLoading() {
if let url = request.url,
let data = Self.testURLs[url] {
self.client?.urlProtocol(self, didLoad: data)
}
client?.urlProtocolDidFinishLoading(self)
}
override func stopLoading() {}
}
Код для тестирования
func requestCards(completionHandler:@escaping (Result<[Card],NetworkCallError>) -> Void ) {
session.dataTask(with: URL(string: "https://deckofcardsapi.com/api/deck/new/draw/?count=52")!) { data, response, error in
guard let data = data else {
completionHandler(.failure(.noData))
return
}