Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # RxTest
- ## sync test
- ```swift
- var scheduler: TestScheduler!
- var subscription: Disposable!
- override func setUp() {
- super.setUp()
- scheduler = TestScheduler(initialClock: 0)
- }
- override func tearDown() {
- scheduler.scheduleAt(1000) {
- self.subscription.dispose()
- }
- super.tearDown()
- }
- func testAmb() {
- let observer = scheduler.createObserver(String.self)
- let observableA = scheduler.createHotObservable([
- next(100, "a"),
- next(200, "b"),
- next(300, "c")
- ])
- let observableB = scheduler.createHotObservable([
- next(90, "1"),
- next(200, "2"),
- next(300, "3")
- ])
- let ambObservable = observableA.amb(observableB)
- scheduler.scheduleAt(0) {
- self.subscription = ambObservable.subscribe(observer)
- }
- scheduler.start()
- let results = observer.events.map {
- $0.value.element!
- }
- XCTAssertEqual(results, ["1", "2", "3"])
- }
- ```
- ## async test
- ### RxBlocking
- - toBlocking() : 시퀀스가 종료될때까지 현재 스레드를 잠근다
- - 시퀀스가 종료되기 이전에 제한시간에 도달하면 에러 발생
- - 비동기 작업을 동기적으로 변환하기 위한 도구
- - materialize() : 비동기작업 결과를 Single 처럼 명확한 의도인 성공이냐 실패냐의 경우의 수에 따라 디테일하게 테스트. examine the result of a blocking operation
- - 기존의 비동기 테스트에서 사용하는 expectation 을 써서 테스트하는 것보다 더 간략하게 코드를 짤 수 있다
- ```swift
- func testToArray() {
- let scheduler = ConcurrentDispatchQueueScheduler(qos: .default)
- let toArrayObservable = Observable.of(1, 2).subscribeOn(scheduler)
- //async -> toBlocking -> sync
- XCTAssertEqual(try! toArrayObservable.toBlocking().toArray(), [1, 2])
- }
- ```
Add Comment
Please, Sign In to add comment