Guest User

Untitled

a guest
Jan 21st, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. # RxTest
  2. ## sync test
  3. ```swift
  4. var scheduler: TestScheduler!
  5. var subscription: Disposable!
  6.  
  7. override func setUp() {
  8. super.setUp()
  9. scheduler = TestScheduler(initialClock: 0)
  10. }
  11.  
  12. override func tearDown() {
  13. scheduler.scheduleAt(1000) {
  14. self.subscription.dispose()
  15. }
  16.  
  17. super.tearDown()
  18. }
  19.  
  20. func testAmb() {
  21. let observer = scheduler.createObserver(String.self)
  22.  
  23. let observableA = scheduler.createHotObservable([
  24. next(100, "a"),
  25. next(200, "b"),
  26. next(300, "c")
  27. ])
  28.  
  29. let observableB = scheduler.createHotObservable([
  30. next(90, "1"),
  31. next(200, "2"),
  32. next(300, "3")
  33. ])
  34.  
  35. let ambObservable = observableA.amb(observableB)
  36.  
  37. scheduler.scheduleAt(0) {
  38. self.subscription = ambObservable.subscribe(observer)
  39. }
  40.  
  41. scheduler.start()
  42.  
  43. let results = observer.events.map {
  44. $0.value.element!
  45. }
  46.  
  47. XCTAssertEqual(results, ["1", "2", "3"])
  48. }
  49. ```
  50.  
  51.  
  52. ## async test
  53.  
  54. ### RxBlocking
  55. - toBlocking() : 시퀀스가 종료될때까지 현재 스레드를 잠근다
  56. - 시퀀스가 종료되기 이전에 제한시간에 도달하면 에러 발생
  57. - 비동기 작업을 동기적으로 변환하기 위한 도구
  58. - materialize() : 비동기작업 결과를 Single 처럼 명확한 의도인 성공이냐 실패냐의 경우의 수에 따라 디테일하게 테스트. examine the result of a blocking operation
  59. - 기존의 비동기 테스트에서 사용하는 expectation 을 써서 테스트하는 것보다 더 간략하게 코드를 짤 수 있다
  60.  
  61. ```swift
  62. func testToArray() {
  63. let scheduler = ConcurrentDispatchQueueScheduler(qos: .default)
  64. let toArrayObservable = Observable.of(1, 2).subscribeOn(scheduler)
  65.  
  66. //async -> toBlocking -> sync
  67. XCTAssertEqual(try! toArrayObservable.toBlocking().toArray(), [1, 2])
  68. }
  69. ```
Add Comment
Please, Sign In to add comment