Swift TyphoonBlockComponentFactory Ошибка в XCTest

Я использую Свифт с Тайфуном и Кокоаподами. Все работало хорошо, пока я не начал писать Integrationtest (в соответствии с тестом Typhoon-Example-App) для моего компонента Typhoon. Я хотел настроить TyphoonFactory в тесте setUp() Метод так же, как я сделал в AppDelegate, Когда я выполняю тест, я всегда получаю

TyphoonBlockComponentFactory assertIsAssembly:] + 244: ОШИБКА: MyApp.MyAssembly не является подклассом TyphoonAssembly

ошибка, вызванная тайфуном (который использует kindOfClass метод под капотом.) Тот же код отлично работает в AppDelegate и я не могу понять, что не так.

Чтобы проверить это поведение, я реализовал isKindOfClass Проверьте в классах стенда (см. код ниже):

  • AppDelegate -> правда
  • MyComponentTest -> false

Может кто-нибудь, пожалуйста, помогите мне дальше? Большое спасибо!

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
    }
}

1 ответ

В интересах других пользователей:

Как уже говорилось в Github на Typhoon, эта ошибка возникает, когда Typhoon CocoaPod включен как в цель приложения, так и в цель теста.

Поскольку тесты в стиле приложения (с установленным флагом TEST_HOST) теперь используются по умолчанию почти везде, цель теста автоматически наследует зависимости от основной цели приложения. В случае Swift, с интервалом имен, вещи могут сломаться, если они дублируются в цели теста.

Поэтому решение состоит в том, чтобы удалить Typhoon и любые другие зависимости приложения от цели тестирования, поскольку они наследуются. Вы все еще можете включить специфичные для теста зависимости следующим образом:

target :tests, :exclusive => true do
   pod 'OCMockito'
   pod 'AnotherTestLibrary' #etc . . 
end
Другие вопросы по тегам