Pregunta Emitir pruebas y usar Cocoapods en un proyecto de Swift


Estoy escribiendo una aplicación en Swift, usando XCode 6 Beta-6. Estoy usando Cocoapods y estoy creando algunas pruebas unitarias.

El problema es este: aparentemente no es posible tener un proyecto que contenga:

1) Proyecto escrito en Swift

2) Algunas cápsulas instaladas usando cocoapods

3) Un archivo de encabezado de puente de Objective-C que importa algunos pods

4) Pruebas unitarias

Esto suena raro, pero sigue mis pasos: después de correr pod install, crea el encabezado del puente Objective-C e importa un pod: todo funciona. Ahora escriba algunas pruebas: para probar sus propias clases, debe importar el módulo llamado "como su proyecto" (o mejor, "como el objetivo principal"): en mi proyecto "MyAwesomeApp" tengo que escribir import MyAwesomeApp en mis archivos de prueba.

Lamentablemente, en este paso, XCode no compilará: en mi import MyAwesomeApp línea con el error "Error al importar el encabezado de enlace '/path/to/MyAwesomeApp/MyAwesomeApp/MyAwesomeApp-Bridging-Header.h";
y el error "xxx.h file not found" aparece en el archivo Bridging-Header, excluyendo la posibilidad de importar un pod.

Además, si no importo los pods en el archivo de puente de Obj-c, el proyecto compilará bien.

Parece que hay un conflicto al importar el encabezado de puente de Objective-C (con los archivos de Objective-C tomados de un subproyecto diferente en el espacio de trabajo) y el "módulo principal" utilizado para las pruebas.

¿Sabes si hay una solución? ¿Qué me estoy perdiendo? Gracias

NOTA: Como solución alternativa, podría importar los pods en el encabezado de puente de Objective-C y, en lugar de incluir el módulo principal en mis pruebas, agregar todas las clases que deseo probar en mi objetivo de "prueba". Esto funcionará, pero no es la solución más limpia (creo)


32
2017-08-25 22:19


origen


Respuestas:


Si echas un vistazo a tus principales configuraciones de compilación, verás que hay una lista de directorios para las configuraciones de "Rutas de búsqueda de encabezado".

O necesita copiar esos valores bajo el objetivo de prueba, o puede intentar modificar su Podfile para incluir sus objetivos principales y de prueba y volver a ejecutar install:

platform :ios, '7.0' 
link_with 'mainapp', 'mainappTests'
...

También tenga en cuenta cualquier otra ruta de encabezado que pueda ser necesaria y que no esté relacionada con CocoaPods.

Y no olvide que sus clases tendrán métodos públicos donde quiera que los pruebe en unidades.

Espero que esto ayude.


32
2017-08-28 11:33



Tal vez haya configurado el ajuste "Encabezado de puente de Objective-C" en el nivel del proyecto, por lo que el objetivo de "Prueba" hereda ese valor y quizás este objetivo de "Prueba" no esté vinculado con Cocoapods.

Utilizar link_with como @sergio sugiere o establece la configuración "Pods * .debug / release" para el objetivo "Test" en "Proyecto-> Información-> Configuración".


7
2017-10-31 10:43



Además de link_with comando en mi Podfile tuve que importar mi módulo de proyecto principal en el archivo de prueba. De esta manera, las clases y los métodos no tienen que ser públicos.

Tenga en cuenta el especial @testable annotation

@testable import my_tutorial_app

También mi nombre principal de proyecto tenía caracteres no alfanuméricos, tuve que reemplazarlos por caracteres de subrayado _


0
2017-12-26 01:30