• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

205
Vistas
No se puede llamar al valor del tipo que no es función, marco de simulación rápido + cuco

Estoy tratando de burlarme de un servicio con cuckoo en swift. Aquí está la función original en el servicio:

 typealias GetAppConfigCompletionHandler = (_ response: AppConfig) -> Void func getAppConfig(delegate: ErrorCoordinatorDelegate, retryClosure: (() -> Void)?, response responseCallback: @escaping GetAppConfigCompletionHandler) { guard let appConfigUrl = "some/url" HttpClientService<AppConfig>.makeRequest(errorCoordinatorDelegate: delegate, retryClosure: retryClosure, url: appConfigUrl) { appConfig in responseCallback(appConfig) } }

Luego, en las pruebas, intento simular EndPointService para que devuelva la llamada a mi valor simulado en lugar de llamar a una API:

 guard let mockedAppConfig: AppConfig = JsonTestingHelper.decodeJSON(resourceName: "mockAppConfig", model: AppConfig.self) else { fail("failed to create mockAppConfig from JSON") return } stub(endPointServiceMock) { mock in when(mock.getAppConfig(delegate: any(), retryClosure: any(), response: any())).then { callback in callback(mockedAppConfig) //error is here } }

Y así es como se ve la función simulada generada:

 func getAppConfig(delegate: ErrorCoordinatorDelegate, retryClosure: (() -> Void)?, response responseCallback: @escaping GetAppConfigCompletionHandler) { return cuckoo_manager.call("getAppConfig(delegate: ErrorCoordinatorDelegate, retryClosure: (() -> Void)?, response: @escaping GetAppConfigCompletionHandler)", parameters: (delegate, retryClosure, responseCallback), escapingParameters: (delegate, retryClosure, responseCallback), superclassCall: Cuckoo.MockManager.crashOnProtocolSuperclassCall() , defaultCall: __defaultImplStub!.getAppConfig(delegate: delegate, retryClosure: retryClosure, response: responseCallback)) }

Por lo que parece, debería funcionar, sin embargo, el compilador se queja en la línea de devolución de llamada (mockedAppConfig):

No se puede llamar al valor del tipo que no es de función '(ErrorCoordinatorDelegate, (() -> Void)?, MockEndPointServiceType.GetAppConfigCompletionHandler)' (también conocido como '(ErrorCoordinatorDelegate, Optional<(() -> ())>, (AppConfig) -> ( ))')

¿Qué me estoy perdiendo?

about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El mensaje de error, aunque un poco complejo, le dice exactamente cuál es el problema;

Cuando llama a callback(mockedAppConfig) , su variable de callback de llamada es en realidad una tupla con 3 parámetros (un ErrorCoordinatorDelegate , una función Void opcional y una función que toma un parámetro AppConfig ).

Para corregir este error, todo lo que necesita hacer es:

 callback.2(mockedAppConfig)

(Así es como hace referencia a cualquier parámetro sin nombre de una tupla)

O, mejor aún, podrías hacer que tu stub se vea así:

 stub(endPointServiceMock) { mock in when(mock.getAppConfig(delegate: any(), retryClosure: any(), response: any())).then { _, _, callback in callback(mockedAppConfig) } }

Que es un poco más estándar y menos oscuro :)

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda