온라인으로 조사를 해본 결과 내가 찾은 최선의 답변은 구형이거나 Android 용입니다. 어떤 도움을 주셔서 감사합니다!Firebase and Swift 3 비동기 단위 테스팅
내가 지난 주에 한 다른 프로젝트의 경우 Swift 2.3을 사용하여 사용자 지정 Heroku/PostGreSQL 백엔드에 대해 약 2 개의 테스트 사례를 작성해야했습니다. 내가 한 모든 것은 테스트 시작 부분에 asyncExpectation 변수를 만들고, 완료 핸들러가 실행 된 후 기대를 충족시킨 다음 테스트의 맨 아래에서 완료 될 때까지 기다리는 것입니다.
이제 Firebase와 Swift 3를 새 프로젝트에 사용하고 있습니다. 웬일인지 아래 asyncExpectation.fulfill()
의 주석을 제거 할 때 데이터베이스에 아무것도 추가되지 않습니다. 그것이 밖으로 주석으로, 모든 것은 잘 작동합니다. Firebase와 Swift 3로 데이터 저장/검색을 테스트하려면 어떻게해야합니까?
편집 : 내가 온라인으로 연구하는 동안 포함시켜야 할 것은 디스패치를 사용해야 할 수도 있다는 것을 알았지 만 중첩 된 completionHandlers에 대한 해결책 인 것 같습니다. 반면 데이터베이스 append
은 꽤 completionHandler가 아니므로, 계속 진행하는 방법에 대한 손실이 있습니다.
class RooMate_v2Tests: XCTestCase {
func testCreateUser() {
let asyncExpectation = expectation(description: "createUserTestOne")
var testSuccess = false
let testUser = (email: "TESTUSER|" + String().randomString(length: 6) + "@test.com", password: String().randomString(length: 6), firstName: "jimmy", lastName: "jenkins")
FIRAuth.auth()?.createUser(withEmail: testUser.email, password: testUser.password) { (user, error) in
if error != nil {
print("Error: \(error.debugDescription)")
} else {
let userProfileInfo = ["firstName" : testUser.firstName,
"lastName" : testUser.lastName,
"email" : testUser.email,
"profilePictureURL" : "N/A"]
let backendRef = FIRDatabase.database().reference()
backendRef.child("users").child("TESTUSER|" + user!.uid).setValue(userProfileInfo)
// testSuccess = true
}
// asyncExpectation.fulfill()
}
waitForExpectations(timeout: 10) { (error) in
XCTAssertTrue(testSuccess)
}
}
}
더 높은 시간 제한을 설정하려고 했습니까? – Zeb
예. 나는 그것을 시도했다. 시간 초과가 문제가되지 않습니다. 이것은 expectation.fulfill()을 삭제하면 왜 효과가 있는지 설명 할 수 있기 때문에 좋은 제안입니다. 나는 30 초를 만들었지 만 여전히 작동하지 않을 것입니다. 이행을 삭제하면 백엔드에 데이터를 추가하는 데 약 5 초 밖에 걸리지 않습니다. –
내 대답 좀 보셨어요? 맞습니까? – Zeb