我用 RxDataSources 的部分创建了 tableView。
视图控制器
viewModel.sectionsObservable
.bindTo(tableView.rx.items(dataSource: viewModel.dataSource))
.disposed(by: disposeBag)
当新元素添加到数组时,sectionsObservable 会发出事件。
我想测试一个正确的元素是否在正确的 indexPath 上。
func testGettingElementForIndexPath() {
let element = Element()
viewModel.addElement(element)
let fetchedElement = viewModel.getElement(at: IndexPath(row: 0, section: 0))
XCTAssertEqual(element, fetchedElement)
}
视图模型
func getElement(at indexPath: IndexPath) -> Element {
return self.dataSource.sectionModels[indexPath.section].items[indexPath.row]
}
它在应用程序中工作,但测试失败。致命错误:索引超出范围
这都是因为异步。如何测试这个案例?
编辑 1:视图模型
let elementsVariable = Variable<[TaskData]>([])
func addElement(_ element: Element) {
elementsVariable.value.append(element)
}
var sectionsObservable: Observable<[Day]> {
return elementsVariable.asObservable().map { (elements) -> [MySection] in
...
}
}