我创建了tableView,其中包含了RxDataSources的部分。
ViewController
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)
}ViewModel
func getElement(at indexPath: IndexPath) -> Element {
return self.dataSource.sectionModels[indexPath.section].items[indexPath.row]
}它在应用程序中工作,但是测试失败。致命错误:超出范围的索引
这都是因为那个异步的。如何检验这个案子?
编辑1: ViewModel
let elementsVariable = Variable<[TaskData]>([])
func addElement(_ element: Element) {
elementsVariable.value.append(element)
}
var sectionsObservable: Observable<[Day]> {
return elementsVariable.asObservable().map { (elements) -> [MySection] in
...
}
}发布于 2017-03-14 21:26:36
如果你说生产代码工作正常,那肯定是个愚蠢的错误。
在生产代码中有:
.bindTo(tableView.rx.items(dataSource: viewModel.dataSource))
在内部设置dataSource内的项
检查它是否也包含在测试代码中。
https://stackoverflow.com/questions/42793796
复制相似问题