我有以下代码,该代码根据计步器是否正在运行来设置trackingState的状态。
func startPedometer() {
if self.pedometer.pedometerAvailable && !self.pedometer.permissionDeclined {
self.pedometer.start { error in
if error != nil {
self.trackingStatus = .notAuthorized
} else {
self.trackingStatus = .started
}
}
}
}
我有以下单元测试,该单元测试失败,并显示错误消息,异步等待失败。
func test_should_change_status_to_not_authorized() {
let mockPedometer = MockPedometer()
mockPedometer.pedometerAvailable = true
mockPedometer.permissionDeclined = false
mockPedometer.error = MockPedometer.notAuthorizedError
let stepTracker = StepTracker(pedometer: mockPedometer)
let exp = expectation(for: NSPredicate(block: { (thing, _) -> Bool in
return (thing as! StepTracker).trackingStatus == .notAuthorized
}), evaluatedWith: stepTracker, handler: nil)
stepTracker.startPedometer()
wait(for: [exp], timeout: 1.0)
}
如果我转到原始代码并进行更改
if error != nil {
到
if let error = error {
然后测试通过。这是为什么?
更新:
很奇怪,我将超时时间更新为2秒,现在两个测试都通过了。