How to Unit Test RxSwift Chaining

175 Views Asked by At

How would I test a method that looks like this?

// in unit test suite

var afterSubscribeClosureEntered = false
viewModel.afterSubscribe = { res in
     afterSubscribeClosureEntered = true
}

viewModel.someMethod()
expect(afterSubscribeClosureEntered).to(beTrue()) // if I used toEventually, it will fail in unit test (time out, unresponsive main loop)

// view model

var afterSubscribe: ((Bool) -> Void)?

func someMethod() {

   observableOne() // method that returns Observable<T>
     .flatMap(observableTwo()) // returns Observable<T>
     .subscribe(onNext: { val in
         // some operation
         self.afterSubscribe?(val)
     })
     .disposed(by: disposeBag)
}

I tried using toEventually but that breaks in Fastlane (time out, main loop unresponsive). The test suite succeed in XCode test though. I don't want to inject a completionHandler in someMethod.Is there a way to test this without using toEventually and waitUntil? Thanks alot!

0

There are 0 best solutions below