Как сопоставить конкретный случай перечисления ошибки Swift с аргументами с помощью Nimble - PullRequest
0 голосов
/ 11 февраля 2019
func orderPizza() throws

enum PizzaOrderError: Error {
    case pizzaServiceNotAnsweringPhone
    case unexpectedAnswer(String)
}

// Test that orderPizza throws any PizzaOrderError
expect { try orderPizza() }.to(throwError(errorType: PizzaOrderError.self))

// Test that orderPizza throws a .pizzaServiceNotAnsweringPhone error
expect { try orderPizza() } 
    .to(throwError(PizzaOrderError.pizzaServiceNotAnsweringPhone))

Учитывая вышеупомянутый интерфейс, как я могу выполнить модульное тестирование, чтобы orderPizza () генерировал любой PizzaOrderError.unexpectedAnswer без проверки строки?

Что-то вроде соответствия throwError(PizzaOrderError.unexpectedAnswer) не представляется возможным, поскольку компилятор всегда ожидает, что конкретный аргумент String будет предоставлен с ошибкой ссылки.

Nimble имеет способ обеспечить замыкание для выполнения «произвольного пользовательского сопоставления».Я не смог найти каких-либо примеров того, как это должно работать, и я немного запутался, когда возвращаемым типом этого замыкания является Void.Я бы ожидал что-то вроде Bool.

Как бы я обозначил успех или неудачу в таком подходящем закрытии?И есть ли какой-нибудь более короткий или более чистый способ извлечь логическую информацию о совпадении регистра enum, чем этот?

if case PizzaOrderError.unexpectedAnswer(_) = error {
    return true
} else {
    return false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...