Я впервые использую RxTest , и я изо всех сил пытаюсь сделать следующий подход:
protocol ViewModelType {
func transform(input: ViewModel.Input) -> ViewModel.Output
}
struct ViewModel: ViewModelType {
private let isLoading = PublishSubject<Bool>()
struct Input {
let trigger: PublishSubject<Void>
}
struct Output {
let someAction: Observable<Void>
let isLoading: Observable<Bool>
}
func transform(input: Input) -> Output {
let someAction = input
.trigger
.do(onNext: { _ in
self.isLoading.onNext(true)
//do some async task
self.isLoading.onNext(false)
})
return Output(someAction: someAction, isLoading: isLoading)
}
}
Я создал тему публикации внутри viewModel, чтобы уведомить представление, когда онодолжен показывать загрузчик или нет.
Все работает нормально, за исключением того, что я не знаю, как проверить это с помощью инфраструктуры RxTest.
Я пытался использовать планировщик и холодные наблюдаемые, но не смогне удалось заставить его работать.
То, что я хотел бы получить:
- С помощью планировщика отправьте .next (10, ()) в триггер.
- Каким-то образом запишите события isLoading и assert равные, которые идут сначала в true, а затем в false.Вот так: [.next (10, true), .next (20, false)].
Может быть, isLoading, как я это сделал, не тестируется.Но, похоже, он проходит через вывод. Я думаю, что, возможно, есть какой-то способ.
Большое спасибо, если что-то неясно, пожалуйста, не стесняйтесь редактировать или направлять меня к лучшему вопросу.Очень ценится.