vendredi 4 décembre 2015

Generics and How to Override Observable

We're using Swift 2.x (latest) and want to BDD (unit test) our code. As an aside, we're using RxSwift too. Our overridden method does not get called in our custom test stub. Our code:

protocol SomethingDeliverable {
    func fetchSomething(somethingId: String, associatedList: String) -> Observable<String>
    func disposeBag() -> DisposeBag
}

extension SomethingDeliverable {
    func fetchSomething(somethingId: String, associatedList: String) -> Observable<String> {
        return create { observer in
            return NopDisposable.instance
        }
    }
}

For Testing sakes, 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
        }
    }

    private func disposeBag() -> DisposeBag {
        return DisposeBag()
    }
}

Instead of fetchSomething returning Observable<String>, we would like to return Observable<T> and have the StubSomethingAPI override it successfully for testing sakes. How can we do that?

Aucun commentaire:

Enregistrer un commentaire