1
RxDataSourcesでセクションを持つ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]
}
それはアプリで動作しますが、テストが失敗しました。致命的なエラー:インデックスの範囲外
それはすべて非同期です。このケースをテストするには?
EDIT 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
...
}
}
私はdataSource.sectionModelsは」doesnのだと思いますアップデートするのに十分な時間があり、XCTAssertはより速く非同期で実行されます –
'scheduler'をどこかに変更しますか?そうでない場合は、ここではそうではないと思います。 ... –
もしそうなら、私は建築設計に問題があると言います。 'addElement'' getElement'のようなメソッドは反応性のあるコードのにおいです(反応的ではないので必須です):( あなたはまだ私の質問に答えていません:D。あなたの中の 'viewModel.dataSource'を購読しますか?テストコード? –