gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:53:46 25 4
gpt4 key购买 nike

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

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

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

如何模拟 Firebase Auth 对象?有没有人以前有过这方面的经验?

最佳答案

所以我通过创建一些身份验证协议(protocol)并制作 User 来解决这个问题符合该协议(protocol):

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符合 AuthenticationProtocol 的类:

final class Authentication: AuthenticationProtocol {
static let shared = Authentication()
private let auth = Auth.auth()
var currentUser: AuthUser? {
return auth.currentUser
}

当我的应用程序中有一个需要身份验证的类时,我会注入(inject)一个符合 AuthenticationProtocol 的类像这样:

final class MyClass {
private let auth: AuthenticationProtocol

init(auth: AuthenticationProtocol = Authentication.shared) {
self.auth = auth
}

然后我可以通过调用auth.currentUser?.uid来获取当前登录用户的id .

为了测试,我创建了一个符合 AuthenticationProtocol 的模拟类像这样:

final class AuthenticationMock : AuthenticationProtocol {
private let uid: String
let currentUser: AuthUser?

init(currentUser: AuthUser) {
self.currentUser = currentUser
}
}

然后我可以在调用 MyClass(auth: <Authentication Mock Instance>) 时注入(inject)它

关于ios - 需要模拟 Firebase Auth 但不确定如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com