【发布时间】:2019-01-17 16:48:39
【问题描述】:
我有一个 viewMode 来确定是启用还是禁用 iCloud,结果是提示用户登录 iCloud。
有没有办法从 XCTest 以编程方式登录/注销到 iCloud 以可靠地测试所有路径?
这是我的测试
func testShowLoginButtonForiCloud() {
let viewModel = OnboardingViewModel()
let expectation = XCTestExpectation(description: "Wait for CKContainer auth check")
var iCloudEnabled: Bool?
viewModel.shouldShowiCloudLogin { result, error in
iCloudEnabled = result
expectation.fulfill()
}
wait(for: [expectation], timeout: 5.0)
XCTAssertNotNil(iCloudEnabled)
XCTAssertFalse(iCloudEnabled!)
}
这是我的视图模型
typealias Completion = (Bool, Error?) -> Void
final class OnboardingViewModel {
func shouldShowiCloudLogin(completion: @escaping Completion) {
CKContainer.default().accountStatus { (status, error) in
switch status {
case .available :
completion(true, nil)
default :
completion(false, error)
}
}
}
}
【问题讨论】:
-
这是一个细节,但我想玩代码:你能添加
Completion的定义吗?你是不是想拥有它@escaping? -
成功是因为我认为我需要保留局部变量。
-
我更新了评论以包含 typealias。这是一个接受布尔值和可选错误的函数。
标签: swift unit-testing icloud cloudkit xctest