Erreur Swift TyphoonBlockComponentFactory dans XCTest

J'utilise Swift avec Typhoon et Cocoapods. Tout a bien fonctionné jusqu'à ce que je commence à écrire un test d' intégration (selon le test Typhoon-Example-App ) pour mon composant Typhoon. Je voulais configurer TyphoonFactory dans la setUp() Test setUp() de la même manière que dans AppDelegate . Quand j'exécute le test, je reçois toujours un

TyphoonBlockComponentFactory assertIsAssembly:] + 244: ERREUR: MyApp.MyAssembly n'est pas une sous-class de TyphoonAssembly

erreur lancée par Typhoon (qui utilise la méthode kindOfClass sous le capot.) Le même code fonctionne parfaitement dans l' AppDelegate et je ne peux pas comprendre ce qui ne va pas.

Pour vérifier ce comportement, j'ai implémenté le contrôle isKindOfClass dans les classs de stand (voir le code ci-dessous):

  • AppDelegate -> true
  • MyComponentTest -> false

Quelqu'un peut-il m'aider plus loin? Merci beaucoup!

PodFile

 inhibit_all_warnings! target "MyApp" do pod 'Typhoon', '2.1.0' end target "MyAppTests" do pod 'Typhoon', '2.1.0' end 

MyAssembly.swift

 public class MyAssembly : TyphoonAssembly{ //Some definitions } 

AppDelegate.swift

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { … var assembly : MyAssembly = MyAssembly() //Always returns „true“ println("Is type of class: \(assembly.isKindOfClass(TyphoonAssembly))") … } 

MyComponentTest.swift

 import XCTest import MyApp class MyComponentTest: XCTestCase { override func setUp() { super.setup() var assembly : MyAssembly = MyAssembly() //Always returns „false“! println("Is type of class: \(assembly.isKindOfClass(TyphoonAssembly))") //Error is thrown „MyApp.MyAssembly is not a sub-class of TyphoonAssembly“ var factory : TyphoonComponentFactory = TyphoonBlockComponentFactory(assembly: assembly) as TyphoonComponentFactory } } 

Pour le bénéfice des autres users:

Comme discuté sur le Github de Typhoon , cette erreur se produit lorsque le Typhoon CocoaPod est inclus à la fois dans la cible de l'application ainsi que dans la cible de test.

Comme les tests de style d'application (avec l'indicateur TEST_HOST défini) sont presque partout par défaut, la cible de test hérite automatiquement des dependencies de la cible de l'application principale. Dans le cas de Swift, avec l'espacement des noms, les choses peuvent se casser si elles sont dupliquées dans la cible de test.

Par conséquent, la solution consiste à supprimer Typhoon et toutes les autres dependencies de l'application de la cible de test, car ils sont hérités. Vous pouvez toujours inclure des dependencies spécifiques aux tests comme suit:

 target :tests, :exclusive => true do pod 'OCMockito' pod 'AnotherTestLibrary' #etc . . end