私はオンラインでいくつかのリサーチを行いました。私が見つけた最良の回答は古くなっているか、Android向けです。どんな助けもありがとう!FirebaseとSwift 3非同期ユニットテスト
私が先週行った別のプロジェクトでは、Swift 2.3を使用したカスタムHeroku/PostGreSQLバックエンドのテストケースを約2ダース作成する必要がありました。私がしたのは、テストの開始時にasyncExpectation変数を作成し、完了ハンドラを実行した後に期待通りに実行してから、テストの最後に完了するまで待ってください。
私はFirebaseとSwift 3を新しいプロジェクトに使用しています。何らかの理由で、以下のasyncExpectation.fulfill()
のコメントを外すと、データベースに何も追加されません。それがコメントアウトされて、すべて正常に動作します。 FirebaseとSwift 3でデータの保存/取り出しをテストするにはどうすればよいですか?
編集:私は私がオンラインリサーチなか、私は私が派遣使用する必要があるかもしれませんが、私のデータベースappend
方法はかなりcompletionHandlerないのに対し、これは、ネストされたcompletionHandlersのためのソリューションのように思えることを明らかにすることを含まなければならないので、私は」どのように進行するかについては紛失している。
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