ios - 需要模拟 Firebase Auth 但不确定如何
问题描述
我使用 Firebase 在我的应用中管理身份验证。这有一个登录用户的单例对象:Auth.auth().currentUser
在我的部分代码中,我检查uid
登录用户的 是否等于userId
与对象关联的 a 。
我需要测试使用此检查的代码。为此,我需要能够注入一个模拟 Firebase Auth 对象。
如何模拟 Firebase Auth 对象?有没有人有过这方面的经验?
解决方案
所以我通过创建一些用于身份验证的协议并使其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
符合以下条件的类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
}
}
然后我可以在我打电话时注入它MyClass(auth: <Authentication Mock Instance>)
推荐阅读
- mongodb - $add 仅支持数字或日期类型,不支持数组在 Mongoose 中递增时出错
- javascript - Jquery循环比较没有得到预期的结果
- javascript - 在 React 的组件构造函数中传递函数
- symfony - 一次执行多个请求时,Windows 上的 Doctrine 缓存问题
- javascript - 选项卡控件在 ASP.net MVC 中无法按预期工作
- ios - 如何在 swift 5 中过滤数组以在搜索栏中搜索文本?
- stm32 - STM32 HAL_I2C_Master_Transmit - 为什么我们需要转移地址?
- mysql - 如何在 mySQL 中删除小数点前的前导 0
- python - 使用 numpy trapz 将 2D 数据与 nans 集成
- spring - 对springboot postgres表进行分区