I got this class which I'd like to write tests for:
import CoreLocation
import RxCocoa
import RxSwift
struct LocationManager {
private (set) var authorized: Driver<Bool>
private let coreLocationManager = CLLocationManager()
init() {
coreLocationManager.distanceFilter = kCLDistanceFilterNone
coreLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
authorized = Observable.deferred { [weak coreLocationManager] in
let status = CLLocationManager.authorizationStatus()
guard let coreLocManager = coreLocationManager else {
return Observable.just(status)
}
return coreLocManager
.rx_didChangeAuthorizationStatus
.startWith(status)
}
.asDriver(onErrorJustReturn: CLAuthorizationStatus.NotDetermined)
.map {
switch $0 {
case .AuthorizedWhenInUse:
return true
default:
return false
}
}
coreLocationManager.requestWhenInUseAuthorization()
}
}
Basically I want to test whether the authorized Driver
has the correct value based on possible CLAuthorizationStatuses
. I need a hint in the right direction since I am not familiar with unit testing with RxSwift. I guess my best option is to create a mock of CLLocationManager
which returns some CLAuthorizationStatus when authorizationStatus()
is called and afterwards I would check the value of the authorized Driver
right ?
Any explanation on how to test this LocationManager
class is appreciated.