У меня есть протокол, который я прикрепляю к UIViewController
, который я хотел бы разрешить представление UIAlertController
.
import UIKit
struct AlertableAction {
var title: String
var style: UIAlertAction.Style
var result: Bool
}
protocol Alertable {
func presentAlert(title: String?, message: String?, actions: [AlertableAction], completion: ((Bool) -> Void)?)
}
extension Alertable where Self: UIViewController {
func presentAlert(title: String?, message: String?, actions: [AlertableAction], completion: ((Bool) -> Void)?) {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
actions.forEach { action in
alertController.addAction(UIAlertAction(title: action.title, style: action.style, handler: { _ in completion?(action.result) }))
}
present(alertController, animated: true, completion: nil)
}
}
Затем я просто вызываю этот метод в моем UIViewController
в любое время, когда я хочу подать предупреждение
self?.presentAlert(
title: nil, message: "Are you sure you want to logout?",
actions: [
AlertableAction(title: "No", style: .cancel, result: false),
AlertableAction(title: "Yes", style: .destructive, result: true)],
completion: { result in
guard result else { return }
self?.viewModel.revokeSession()
}
)
Я пытаюсь в XCTestCase
утверждать, что нажатие Да вызывает правильный метод для моей модели представления.
Я понимаю, что UITest
позволит мне проверить видимое предупреждение и, возможно, затем нажать Да Я перенаправлен на маршрут выхода из системы, однако мне действительно интересно проверить сам метод.
Однако я не уверен, как проверить это в коде.