2016-08-12 11 views
1

コードは本からは常にnilを、それは常に最初XCTFail()に失敗しています、私は、それは、ネットワークの問題ではエラーに見should'tデバイスとシミュレータの両方でそれを試してみました、それは示していOptional(Error Domain=kCLErrorDomain Code=2 "(null)")テストCLGeocoder geocodeAddressString方法の目印がある

func test_GeocoderWorksAsExpected() { 
    let expectation = expectationWithDescription("Wait for geocode") 
    CLGeocoder().geocodeAddressString("Infinite Loop 1, Cupertino") { 
     (placemarks, error) -> Void in 
     let placemark = placemarks?.first 

     let coordinate = placemark?.location?.coordinate 
     guard let latitude = coordinate?.latitude else { 
      XCTFail(); return 
     } 
     guard let longitude = coordinate?.longitude else { 
      XCTFail(); return 
     } 
     XCTAssertEqualWithAccuracy(latitude, 37.3316851, accuracy: 0.000001) 
     XCTAssertEqualWithAccuracy(longitude, -122.0300674, accuracy: 0.000001) 

     expectation.fulfill() 
    } 
    waitForExpectationsWithTimeout(3, handler: nil) 
} 

答えて

2

あなたはそれがネットワークエラーすべきではないと言うが、それは2のコードでCLErrorDomainエラーが(CLError.Network)何であるかを正確です。さまざまな理由でそれを得ることができます。たとえば、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) 
} 
+0

は、私が誤って私の自宅の住所をコードで満たされたアドレスを交換するdicide、それが動作します。あなたの答えをありがとう、私は本当にあなたが提供したコードから何かを学んだ:) –

関連する問題