【发布时间】:2018-06-24 17:52:57
【问题描述】:
我想为带有引发错误的闭包的函数创建一个测试。进行此测试的最佳做法是什么?
凭据.swift
class Credential {
let email: String
let password: String
init(email: String, password: String) {
self.email = email
self.password = password
}
}
SignUpError.swift
enum SignUpError: Error {
case other(error: Error)
case userAlreadyExist
}
FirebaseController.swift
typealias SignUpResult = (_ inner: () throws -> RebloodUser) -> Void
func signUp(_ credential: RebloodCredential, completionHandler: @escaping SignUpResult) {
self.auth.createUser(withEmail: credential.email, password: credential.password) { (user: User?, error: Error?) in
guard let user = user, error == nil else {
completionHandler({ () -> RebloodUser in
throw SignUpError.other(error: error!)
})
return
}
completionHandler({ () -> RebloodUser in
let rebloodUser = RebloodUser(firebaseIdentifier: user.uid)
return rebloodUser
})
}
}
FirebaseControllerTests.swift
let controller = FirebaseController()
let credential = Credential(email: "address@email.com", password: "Password1234")
func testControllerCanSignUp() {
self.controller.signUp(self.credential) { (inner: () throws -> RebloodUser) -> Void in
do {
let user = try inner()
XCTAssertNotNil(user.firebaseIdentifier)
return
} catch SignUpError.userAlreadyExist {
return
} catch {
XCTFail("Wrong error thrown")
}
}
}
【问题讨论】:
标签: ios swift unit-testing firebase error-handling