2016-04-02 1 views
-1

Это мой запрос. Он находится внутри цели тестирования. И я установил applicationID и clientKey внутри AppDelegate.swift.Как вы пишете модульные тесты с помощью Parse в Xcode (Swift в моем случае)?

Я поставил точку останова в AppDelegate.swift, так что это определенно попадается, когда я запускаю тест. Он также попадает в точку останова, установленную до строки 5 нижеприведенного кода (customer.saveinbackgroundWithBlock ...). Но когда я поставил точку останова сразу после этой строки, это не ударило бы ее, и тест «преуспел». Кроме того, панель управления Parse показывает, что клиент не был добавлен.

Я тестировал тот же запрос в обычной целевой программе, и это сработало. Просто не в тестовой цели.

func testCustomersExistCase() { 
    // Save a test customer 
    let customer = Customer(firstName: "Jonathan", lastName: "Goldsmith", email: "[email protected]", streetAddress: "100 Main St", city: "Monterrey", state: "Texas", zipCode: "55555") 
    customer.shopID = "dosequis" 

    customer.saveInBackgroundWithBlock({ 
     (success: Bool, error: NSError?) -> Void in 
      if success { 
       print("This test should work.") 
       self.customerSearchViewControllerDataSource.getAllCustomers(self.customeSearchViewController) 

       // Check if it's in the customers array 
       for customerResult in self.customeSearchViewController.data! { 
        if customerResult.objectId == customer.objectId { 
         XCTAssertTrue(true, "Success! Customer was added.") 

         // Delete customer if test had succeeded. 
         customer.deleteInBackgroundWithBlock({ 
          (success: Bool, error: NSError?) -> Void in 
          if success { 
           print("Clean-up after test was successful") 
          } else { 
           print("Need to delete customer manually") 
          } 
         }) 
        } else { 
         XCTAssertTrue(false, "Query is broken. Customer was not retrieved") 
        } 
       } 
      } else { 
       print("This test will not work. Customer was not added to Parse") 
      } 
     if error != nil { 
      print("This test isn't working. Parse threw an error.") 
     } 
    }) 
} 

} 

ответ

0

Это происходит потому, что блок синтаксического анализа выполняется в другом потоке, чем ваш тест работает, и поэтому ваш тест заканчивается не знает, что делает блок синтаксического анализа.

Для тестирования асинхронных операций вы должны создать ожидание в вашем подклассе XCTest и вызвать метод waitFor Expectation. Вот простой пример:

Вид управления ж/метод

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func getUserStuff(completionHandler: (succeeded: Bool) ->()) { 

} 
} 

Тест:

func testGetUserInfo() { 

    let vc = ViewController() 

    let userOpExpectation: XCTestExpectation = expectationWithDescription("Got user info") 

    vc.getUserStuff { (succeeded) in 
     XCTAssert(succeeded, "Should get user stuff") 
     userOpExpectation.fulfill() 
    } 

    waitForExpectationsWithTimeout(5.0, handler: nil) 
} 

Там очень много, что идет в тестировании и Apple, обеспечивает много, как в пути включены код и документацию, проверьте: https://developer.apple.com/library/tvos/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html для получения дополнительной информации.

+0

Спасибо! Я видел ожидания в своих исследованиях, но он никогда не щелкал, что мне они понадобятся. –

+0

@ArthurAyetiss Добро пожаловать! Я уверен, вы получите поток с ними. :) –

Смежные вопросы