1

我用 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
        ...
    }
}
4

1 回答 1

0

如果您说生产代码工作正常,那一定是一些愚蠢的错误。

在生产代码中,您有:

.bindTo(tableView.rx.items(dataSource: viewModel.dataSource))

它在内部设置数据源内的项目

检查您是否在测试代码中也有它

于 2017-03-14T21:26:36.003 回答