Итак, я провел некоторое исследование в Интернете, и лучшие ответы, которые я нашел, либо устарели, либо предназначены для Android. Любая помощь приветствуется!Испытание асинхронного устройства Firebase и Swift 3
Для другого проекта, который я сделал в течение прошлой недели, мне пришлось написать около 2 дюжин тестовых примеров для пользовательского бэкэда Heroku/PostGreSQL с Swift 2.3. Все, что я сделал, это создать переменную asyncExpectation в начале теста, выполнить ожидание после выполнения обработчика завершения, а затем дождаться, когда оно будет выполнено в нижней части теста.
Теперь я использую Firebase и Swift 3 для нового проекта. По какой-то причине в базу данных ничего не добавляется, когда я раскомментирую asyncExpectation.fulfill()
ниже. С его комментариями все работает нормально. Как мне пойти на тестирование хранения/извлечения данных с помощью Firebase и Swift 3?
Редактировать: Я должен добавить, что среди моих исследований в Интернете я обнаружил, что мне может понадобиться диспетчеризация, но это похоже на решение для вложенных завершенийHandlers, тогда как моя база данных append
не совсем завершенаHandler, м в убытке за то, как действовать.
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
Да, я пробовал это. Тайм-аут, похоже, не является проблемой. Это хорошее предложение, потому что это объясняет, почему удаление expect.fulfill() заставляет его работать. Я сделал это 30 секунд, и он все равно не сработает. Когда я удаляю выполнение, для добавления данных в бэкэнд требуется только 5 секунд. –
Вы взглянули на мой ответ? Правильно ли это? – Zeb