代码之家  ›  专栏  ›  技术社区  ›  Alex Stone

iOS RxSwift-使用RxTest和TestScheduler进行测试不会结束/终止测试用例

  •  1
  • Alex Stone  · 技术社区  · 6 年前

    TestScheduler RxTest 4.2 RxSwift 4.2

    如何正确地创建TestScheduler并向其传递在所有事件执行后终止调度器的事件?

    下面的代码在启动测试调度器时进入无限循环。因为它保持同步循环,所以我没有机会阻止调度器进行测试

        var testScheduler: TestScheduler = TestScheduler(initialClock: 0)
    
        let stateObserver = testScheduler.createObserver(Bool.self)
        subject.outputRelay.bind(to: stateObserver).disposed(by: bag)
    
        let events = [next(1,true), next(10,false)]
        let hotObservable = testScheduler.createHotObservable(events)
    
        //direct events to the given relay
        hotObservable.bind(to: subject.inputRelay).disposed(by: bag)
    
        testScheduler.start() //infinite loop
    
    //do not get called
        XCTAssertEqual(stateObserver.events, [next(0, InterfaceState.started)])
        testScheduler.stop()
    

    我已经将发布的范围缩小到了 测试调度器

     func findNext() -> VirtualSchedulerItem<VirtualTime>? {
            while let front = _schedulerQueue.peek() {
                if front.isDisposed {
                    //this never gets called
                    _schedulerQueue.remove(front)
                    continue
                }
    
                return front
            }
    
            return nil
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   davebcn87    6 年前

    //...
    let hotObservable = testScheduler.createHotObservable(events)
    let disposable = hotObservable.bind(to: subject.inputRelay)
    testScheduler.scheduleAt(1) {
         disposable.dispose()
    }
    testScheduler.start()
    XCTAssertEqual(stateObserver.events, [next(0, InterfaceState.started)])
    //...
    
    推荐文章