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
source share
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

Source: https://habr.com/ru/post/1618570/


All Articles