Как сопоставить конкретный случай перечисления ошибки Swift с аргументами с помощью Nimble
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
}
1 ответ
Сопоставление конкретных типов ошибок и случаев работает следующим образом:
.to(throwError(errorType: PizzaOrderError.self) {
expect($0) == .pizzaServiceNotAnsweringPhone
}