需要模拟Firebase Auth,但不确定如何

时间:2018-11-22 18:28:20

标签: ios swift firebase firebase-authentication

我使用Firebase在我的应用程序中管理身份验证。对于已登录的用户,它具有一个单例对象:Auth.auth().currentUser

在我的代码的一部分中,我检查了登录用户的uid是否等于与对象关联的userId

我需要测试使用此检查的代码。为此,我需要能够注入模拟Firebase Auth对象。

如何模拟Firebase Auth对象?以前有没有人有经验?

1 个答案:

答案 0 :(得分:1)

因此,我通过创建一些身份验证协议并使User符合该协议来解决了这个问题:

protocol AuthUser {
    var uid: String {get}
    var displayName: String? {get}
    var email: String? {get}
    var photoURL: URL? {get}
}

extension User : AuthUser {}

protocol AuthenticationProtocol {
    var currentUser: AuthUser? {get}
}

然后我创建了一个符合Authentication的{​​{1}}类:

AuthenticationProtocol

当我的应用中有一个需要身份验证的类时,我将注入一个符合final class Authentication: AuthenticationProtocol { static let shared = Authentication() private let auth = Auth.auth() var currentUser: AuthUser? { return auth.currentUser } 的类,如下所示:

AuthenticationProtocol

然后我可以通过调用final class MyClass { private let auth: AuthenticationProtocol init(auth: AuthenticationProtocol = Authentication.shared) { self.auth = auth } 来获取当前登录用户的ID。

对于测试,我然后创建一个符合auth.currentUser?.uid的模拟类,如下所示:

AuthenticationProtocol

然后我可以在致电final class AuthenticationMock : AuthenticationProtocol { private let uid: String let currentUser: AuthUser? init(currentUser: AuthUser) { self.currentUser = currentUser } }

时注入