代码来自书本,它在第一个XCTFail()中总是失败,我在设备和模拟器上都尝试过,它应该是网络问题,查看错误,它显示{{ 1}}
Optional(Error Domain=kCLErrorDomain Code=2 "(null)")
答案 0 :(得分:3)
你说它不应该是网络错误,但这恰恰是代码为2的CLErrorDomain
错误(CLError.Network
)。你可以出于各种原因得到它。例如,当我尝试监视与Charles的通信时,我得到了它,但还没有告诉我的计算机信任Charles证书。但是一旦我做了,那个错误就消失了。您可能想要确认您没有使用干扰TLS / HTTPS请求的代理服务器或其他网络。
顺便说一句,我也建议:
defer
满足期望(无论你从那个闭包中取出什么路径,它都会得到满足);和所以,或许类似于:
func testGeocoder() {
let expectation = expectationWithDescription("Wait for geocode")
CLGeocoder().geocodeAddressString("Infinite Loop 1, Cupertino") { placemarks, error in
defer { expectation.fulfill() }
guard error == nil else {
XCTFail(error!.localizedDescription); return
}
guard let coordinate = placemarks?.first?.location?.coordinate else {
XCTFail("No coordinate"); return
}
XCTAssertEqualWithAccuracy(coordinate.latitude, 37.3316851, accuracy: 0.001, "Latitude doesn't match")
XCTAssertEqualWithAccuracy(coordinate.longitude, -122.0300674, accuracy: 0.001, "Longitude doesn't match")
}
waitForExpectationsWithTimeout(3, handler: nil)
}