Как сопоставить конкретный случай перечисления ошибки 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
}
Другие вопросы по тегам