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)
}
뷰 모델
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
...
}
}
나는 dataSource.sectionModels은 '아무튼 생각 업데이트 될 시간이 충분하고 XCTAssert가 더 빠른 비동기로 실행됩니다. –
'scheduler'를 어딘가에 변경합니까? 그렇지 않다면 여기에 해당하지 않는다고 생각합니다. 하지만 ... –
그렇다면 건축 디자인에 문제가 있다고 생각합니다. 'addElement''getElement'와 같은 메소드는 반응 코드이지만 냄새가납니다. (반응이 없지만 필수적이기 때문에) ( 그러나 아직 내 질문에 답하지 못했습니다 : D. 'viewModel.dataSource'를 구독하고 있습니까? 테스트 코드는 무엇입니까? –