How to override observable <T> for testing?
We use Swift 2.x (the latter) and want to use BDD (unit test) our code. Aside, we are using RxSwift . Our overridden method is not called in our test stub. Our code:
protocol SomethingDeliverable {
func fetchSomething(somethingId: String, associatedList: String) -> Observable<String>
}
extension SomethingDeliverable {
func fetchSomething(somethingId: String, associatedList: String) -> Observable<String> {
return create { observer in
return NopDisposable.instance
}
}
}
For testing sake, we have this test code:
private class StubSomethingApi: SomethingDeliverable {
var responseClosure: ((AnyObserver<String>) -> Void)?
func fetchSomething(somethingId: String, associatedList: String) -> Observable<String> {
return create { observer in
if let responseClosure = self.responseClosure {
responseClosure(observer)
}
return NopDisposable.instance
}
}
}
Instead of fetchSomething returning an Observable < String >, we would like to return an Observable < T > and have the StubSomethingAPI property for successful testing. How can we do this?
+4
1 answer
Is this what you are looking for?
protocol SomethingDeliverable {
associatedtype Element
func fetchSomething(somethingId: String, associatedList: String) -> Observable<Element>
}
extension SomethingDeliverable {
func fetchSomething(somethingId: String, associatedList: String) -> Observable<Element> {
return create { observer in
return NopDisposable.instance
}
}
}
private class StubSomethingApi<T>: SomethingDeliverable {
typealias Element = T
var responseClosure: ((AnyObserver<T>) -> Void)?
func fetchSomething(somethingId: String, associatedList: String) -> Observable<T> {
return create { observer in
if let responseClosure = self.responseClosure {
responseClosure(observer)
}
return NopDisposable.instance
}
}
}
0