RxBlocking은
바로 전 포스팅에서 정리했던 RxTest와 같은 TestScheduler는 없이
Observable의 Event방출을 검증하는 방법입니다.
단순히 Observable이 특정값들을 방출하는 것을 검증할 때는 RxTest가 아니라 RxBlocking만으로 충분할 것입니다.
RxBlocking은 Observable의 next이벤트를 배열로 변환하는 방법을 제공하여,
해당 값을 TestAssertion으로 테스팅할 수 있도록 해줍니다.
Observable에 .toBlocking()을 사용하면
Observable을 BlockingObservable로 전환해주고,
BlockingObservable은 .toArray()를 통해 next이벤트들을 complete이벤트가 발생할 때까지 배열로 전환시켜줍니다.
아래는 예시입니다.
// Observable -> BlockingObservable
let observable = Observable.of("A", "B", "C").toBlocking()
// Observable의 next이벤트를 Array로 전환
let values = try! observable.toArray()
// Nimble로 Test
expect(values).to(equal("A", "B", "C"))
complete이벤트가 보장되지 않는 Observable은 .toBlocking(timeout:)을 통해 timeout을 설정하여 전환을 시켜주면 됩니다.
// Observable -> BlockingObservable
let observable = Observable.of("non", "complete", "event").toBlocking(timeout: 2)
// Observable의 next이벤트를 Array로 전환
let values = try! observable.toArray()
// Nimble로 Test
expect(values).to(equal("non", "complete", "event"))