Я пишу сетевой уровень, следуя подходу TDD.
У меня есть структура, которую я буду использовать для кодирования любых параметров в моем запросе.
Я хотел бы заявить, чтоесли при вызове этого кодировщика отсутствует URL / nil, выдается правильная ошибка.
struct URLParameterEncoder: ParameterEncoder {
static func encode(urlRequest: inout URLRequest, with parameters: Parameters) throws {
guard let url = urlRequest.url else { throw NetworkError.missingURL }
}
}
Я написал тест и передал URL, который, по моему мнению, должен соответствовать этому тесту, однако получаю ошибкупри попытке запустить тест.
class URLParameterEncoderTests: XCTestCase {
var sut: URLParameterEncoder!
override func setUp() {
sut = URLParameterEncoder()
}
func test_Encode_ThrowsMissingURLError_WhenURLIsNil() {
let request = URLRequest(url: URL(string: "")!)
let params: Parameters = [:]
XCTAssertThrowsError(try sut.encode(urlRequest: &request, with: params)) { error in
XCTAssertEqual(error as? NetworkError, NetworkError.missingURL)
}
}
}
В моем XCTAssertThrowsError
я получаю Type of expression is ambiguous without more context
, который, по моему мнению, срабатывает около sut.encode
Дополнительный код, необходимый для репликации
public typealias Parameters = [String: Any]
public protocol ParameterEncoder {
static func encode(urlRequest: inout URLRequest, with parameters: Parameters) throws
}
public enum NetworkError: String, Error {
case paramsAreNil = "Missing params"
case encodingFailed = "Could not encode params"
case missingURL = "Request URL is missing"
}