Skip to content

Instantly share code, notes, and snippets.

@oozoofrog
Last active May 2, 2018 05:44
Show Gist options
  • Save oozoofrog/d72684bfe5620664eaa69b7c37f81038 to your computer and use it in GitHub Desktop.
Save oozoofrog/d72684bfe5620664eaa69b7c37f81038 to your computer and use it in GitHub Desktop.
aysynchronous Rx Observable test handle function
public func XCTRxHandle<Element>(_ description: String = "XCTAssertForRx", testcase: XCTestCase, timeout: TimeInterval = 1, queue: DispatchQueue = DispatchQueue(label: "Rx queue"), observable: Observable<Element>, trigger: @autoclosure @escaping () -> Void = {}(), value onNext: @escaping (Element?) -> Void = { _ in }, completed: @autoclosure @escaping () -> Void = {}(), error onError: @escaping (Error?) -> Void = { _ in }, result: (XCTWaiter.Result) -> Void = { _ in } ) {
let expect = testcase.expectation(description: description)
expect.assertForOverFulfill = false
let bag = DisposeBag()
queue.async {
observable.subscribe({ (event) in
switch event {
case .error(let error):
onError(error)
onNext(nil)
expect.fulfill()
case .next(let element):
onNext(element)
onError(nil)
expect.fulfill()
case .completed:
completed()
onError(nil)
expect.fulfill()
}
}).disposed(by: bag)
}
queue.async {
trigger()
}
result(XCTWaiter.wait(for: [expect], timeout: timeout))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment