2013-12-12 3 views
1

Я пытаюсь получить новый проект, настроенный с помощью ReactiveCocoa и Kiwi для тестирования, используя CocoaPods для управления зависимостями.Использование ReactiveCocoa, Kiwi и Cocoapods вместе, получение исключения «не является кортежем»

У меня есть первый тест, настроенный для обычного экрана входа в систему, где кнопка входа в систему не включена, пока пользователь не вводит что-то для имени пользователя и пароля. Только более простой вариант некоторых из кода примера:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    RAC(self.loginButton, enabled) = [RACSignal combineLatest:@[self.userNameField.rac_textSignal, 
                  self.passwordField.rac_textSignal] 
                 reduce:^(NSString *username, NSString *password) { 
     return @(username.length > 0 && password.length > 0); 
    }]; 
} 

Проблема заключается в том, что, когда я бегу моих тестов, я получаю следующее сообщение об ошибке:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Value from stream <RACDynamicSignal: 0xe3735a0> name: +combineLatest: (
    "<RACDynamicSignal: 0xe368c50> name: <UITextField: 0xe3707a0> -rac_textSignal", 
    "<RACDynamicSignal: 0xe372d80> name: <UITextField: 0xe36aef0> -rac_textSignal" 
) is not a tuple: <RACTuple: 0xe377a40> (
    "", 
    "" 
)' 

Конечно, это RACTuple, так это просто сбивает с толку.

Мои исследования оказался следующий вопрос о ReactiveCocoa:

https://github.com/ReactiveCocoa/ReactiveCocoa/issues/901

Диагноз есть, что ReactiveCocoa становится связан в два раза как-то. Человек, у которого была проблема, разрешил его, бросив CocoaPods. Это не кажется правильным. Кто-нибудь получил эту работу?

Для полноты моего Podfile является:

platform :ios, '6.0' 

pod 'ReactiveCocoa' 

target :test do 
    link_with 'PollVaultTests' 
    pod 'Kiwi/XCTest' 
end 

ответ

4

Ну, я получаю ответ на свой вопрос.

Оказалось, что, когда стружки перечислены на «глобальном» уровне в вашем Podfile, CocoaPods включает их во всех целях.

Результат в этом случае заключается в том, что мои основные ссылки проекта в CocoaPods - и моя цель тестирования.

Когда моя тестовая цель вводится в мой основной проект для запуска тестов - вы получаете ссылку ReactiveCocoa в два раза. Таким образом, есть два класса с именем RACTuple, плавающие вокруг - и поэтому, когда код ReactiveCocoa внутренне проверяет, является ли его аргумент RACTuple, он проверяет неправильную копию класса и фактически имеет ложно отрицательный результат.

Решения, чтобы убедиться, что мой тест цель в Podfile сконфигурирована, чтобы связать в только тестах стручков так:

platform :ios, '6.0' 

pod 'ReactiveCocoa' 

target :test, :exclusive => true do 
    link_with 'PollVaultTests' 
    pod 'Kiwi/XCTest' 
end 

Это :exclusive => true части, что говорит Cocoapods включать только киви в моей тестовой цели. Задача решена!

+0

Потенциальная лицевая ладонь: вам нужно повторно запустить 'pod install', чтобы это работало. – eremzeit

 Смежные вопросы

  • Нет связанных вопросов^_^