140 votes

Test d'unité Xcode avec des cocoapodes

J'ai été à se taper la tête contre un mur avec ça depuis quelques jours mais en dépit de multiples Google//Github recherches je ne peux pas trouver une solution aux questions que je vais avoir!

Tout ce que je suis en train de faire est de créer des tests unitaires pour mon application qui rend l'utilisation de Firebase gousses.

Je suis en utilisant Xcode 7.3.1 & Cocoapods 1.0.1. Mise à jour:le Problème demeure avec Xcode 8.0

Avec cette podfile:

platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!

target 'MyApp' do
    pod 'Firebase'
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'

    target 'MyAppTests' do
        inherit! :search_paths
    end
end

Dans mon XCTest classe-je obtenir

Manque module "Firebase'

erreur lors de l' @testable import MyApp

Sinon avec ce podfile:

platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!

def common_pods
    pod 'SwiftyTimer'
    pod 'Firebase'
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'
end

target 'MyApp' do
    common_pods
end

target 'MyAppTests' do
    common_pods
end

Les tests de construire, mais ma console est jonché de mises en garde par ex.:

Classe <-FirebaseClassName-> est mis en œuvre dans les deux ...MyApp... et ...MyAppTests... l'Un des deux va être utilisé. Ce qui est indéfini

96voto

Mackarous Points 725

J'ai eu le même problème. Je l'ai résolu en déplaçant pod 'Firebase' vers ma cible de test. Changez votre Podfile en ceci:

 platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!

target 'MyApp' do
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'

    target 'MyAppTests' do
        inherit! :search_paths
        pod 'Firebase'
    end
end
 

63voto

Andy Chou Points 476

Essayez de changer l'héritage en :complete , comme dans:

 target 'MyAppTests' do
    inherit! :complete
end
 

Il est important de noter que cela permet à tous les autres utilisateurs de votre référentiel de faire un pod update comme d'habitude sans avoir à copier .xcconfig fichiers ou autre piratage à créer.

61voto

Kanika Sharma Points 91
  1. Sélectionnez votre paramètre de cible de test unitaire.
  2. Allez dans les paramètres de construction.
  3. Recherchez les chemins de recherche d'en-tête.
  4. Ajoutez cette valeur $ (SRCROOT) / Pods avec récursif, puis Xcode résoudra le chemin pour vous.

Exemple

35voto

Will Points 657

Le problème est que Firebase fait quelque chose de spécial avec l'en-Tête des Chemins de Recherche après CocoaPods génère sa propre valeur pour le paramètre de sorte CocoaPods ne ramasse pas sur ce changement afin de le porter sur la cible de test. Vous pouvez résoudre ce problème de deux façons:

  1. Localiser MyAppTests.<configuration>.xcconfig dans le navigateur de fichiers et d'ajouter les éléments suivants à l' HEADER_SEARCH_PATHS:

    ${PODS_ROOT}/Firebase/Analytics/Sources [*]

  2. Trouver le réglage pour l'en-Tête des Chemins de Recherche dans les Paramètres de construction et d'ajouter que même valeur que dans l'option 1 de la liste. Vous ne devriez pas avoir à le définir comme récursive.

* AKM commentaire, il y a ${PODS_ROOT}/Firebase/Core/Sources dans la version 3.14.0

7voto

JosephH Points 21074

Le problème est enregistrée dans le firebase projet ici:

https://github.com/firebase/firebase-ios-sdk/issues/58

Il y a une solution:

Ajouter "${PODS_ROOT}/Firebase/Core/Sources" à vos Tests de cibler uniquement en vertu de Construire Paramètres -> en-Tête de Chemins de Recherche

mais c'est aussi, par la mise à niveau vers CocoaPods 1.4.0 ou tard, ce qui est une meilleure solution.

Au moment où j'écris ces lignes (novembre 2017) cocoapods 1.4.0 est encore en version bêta, donc pour l'installer, il vous suffit de demander explicitement de la bêta:

gem install cocoapods --pre

Ce et puis en faisant un pod install résolu le problème de l'exécution de mes tests.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X