Как проверить замыкания в Swift - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в написании тестовых случаев, поэтому, пожалуйста, не воздерживайтесь от каких-либо предложений.

Проблема - Как мне написать тестовый случай для (замыкания / функции более высокого порядка), а не для вызова API, исключая их, чтобы получить100% покрытие, я застрял только в этой части.

CODE -

init (workflow: WorkflowType, useCase: UsecaseType, tracking: TrackingManagerType?) {

    self.workflow = workflow
    self.useCase = useCase
    self.tracking = tracking

    var items:[ITTReturnPaymentsOptionsModel] = []
    items.append(ITTReturnPaymentsOptionsModel(text: "Unexpected payment or \nunknown sender", isSelected: false))
    items.append(ITTReturnPaymentsOptionsModel(text: "Incorrect currency", isSelected: false))
    items.append(ITTReturnPaymentsOptionsModel(text: "Incorrect amount", isSelected: false))
    items.append(ITTReturnPaymentsOptionsModel(text: "Duplicate", isSelected: false))
    items.append(ITTReturnPaymentsOptionsModel(text: "Auction/Order cancelled", isSelected: false))
    items.append(ITTReturnPaymentsOptionsModel(text: "Charges exceeds the principle amount", isSelected: false))

    let observableToggleItems = Observable.just(items)

    let tappedItemAction = Observable.combineLatest(observableToggleItems, itemTapped)
        .map { argument -> [ITTReturnPaymentsOptionsModel] in // for this  closure im stuck

            let (items, indexPath) = argument
            var modifiedItems = items

            for index in modifiedItems.indices {

                if index == indexPath.row {
                    modifiedItems[index].isSelected.toggle()
                } else {
                    modifiedItems[index].isSelected = false
                }
            }

            return modifiedItems
        }.startWith(items)

    didFetchToggleItems = Observable.merge(getToggleItems.withLatestFrom(observableToggleItems), tappedItemAction)
}

1 Ответ

0 голосов
/ 06 ноября 2019

Я предполагаю, что у вас нет проблем с тестированием цепочки Rx здесь, но с самим замыканием.

Тогда было бы лучше, если бы вы извлекли все это замыкание в функцию, которую вы можете напрямую протестировать, а затем просто вызвали функцию в замыкании в .map, что-то вроде:

function modifyItems(argument: ([Item], IndexPath)) -> [ITTReturnPaymentsOptionsModel] {
    // Your closure here
}

А потом что-то вроде:

let tappedItemAction = Observable.combineLatest(observableToggleItems, itemTapped)
        .map { modifyItems($0) }
        .startWith(items)

Это позволит вам выполнить модульное тестирование функции отдельно от цепочки Rx.

...