У меня есть фиктивный интерактор и маршрутизатор для модульных тестов по методике презентатора:
private func presenterMethod(_ isOn: Bool) -> Driver<Bool> {
return interactor.interactorMethod(isOn)
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
.observeOn(MainScheduler.instance)
.do(onError: { [weak self] error in
self?.view.showError(error)
})
.asDriver(onErrorJustReturn: !isOn)
}
И тест
func testPresenterMethod() {
let trigger = self.scheduler.createHotObservable([
next(100, (false)),
next(200, (true)),
next(300, (false))
]).asDriverOnErrorJustComplete()
let observer = scheduler.createObserver(Bool.self)
let input = createInput(presenterTrigger: trigger)
let output = presenter.transform(input)
scheduler.scheduleAt(0, action: {
output.presenterMethodOutput.asObservable()
.subscribe(observer)
.disposed(by: self.disposeBag)
})
scheduler.start()
let results = observer.events.map {
$0.value.element
}
XCTAssertEqual(results, [false, true, false])
}
И результаты пусты,
Этот тест работает правильно, только когда я удаляю эти строки из PresenterMethod
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
.observeOn(MainScheduler.instance)
Я попытался с XCTestExpectation и выполнил в блоке do (onNext: {}) и получил те же результаты, работая только без фона подписки.Метод корректно работает на устройстве и симуляторе, PresenterMethod переключается при переключении и выдает правильные события.Как написать этот тест для работы с SubscribeOn background?