Тестирование асинхронного UITableView с KIF - PullRequest
1 голос
/ 13 января 2012

Я начинаю работать с KIF и испытываю проблемы с тестированием моих асинхронно загруженных табличных представлений с моей текущей конфигурацией.

У меня есть домашний экран в моем приложении с кнопкой.Когда эта кнопка нажата, отображается модальный контроллер вида.

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Setup accessibility
    self.theTableView.accessibilityLabel = @"My List";

    // Register for notifications
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(objectsLoadedNotification:) name:kNotificationObjectsLoaded object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(objectsFailedToLoadNotification:) name:kNotificationObjectsFailedToLoad object:nil];

    // Start loading new data
    [[MyListObjectManager sharedInstance] requestObjects];
}

Теперь я настроил тест в KIF, который выглядит следующим образом:

+ (id)scenarioToSelecList
{
    KIFTestScenario *scenario = [KIFTestScenario scenarioWithDescription:@"Test that a user can select an item from my list."];

    [scenario addStep:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"List"]];
    [scenario addStep:[KIFTestStep stepToWaitForNotificationName:kNotificationObjectsLoaded object:nil]];
    [scenario addStep:[KIFTestStep stepToTapRowInTableViewWithAccessibilityLabel:@"My List" atIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]];
}

Когда я запускаю тест, KIF никогда не видит уведомление о загруженных объектах.

При отладке я заменил вызов [objectManager requestObjects] в моем методе viewDidLoad на асинхронный вызов для запроса объектов через три секунды:

[[MyListObjectManager sharedInstance] performSelector:@selector(requestObjects) withObject:nil afterDelay:3.0];

Когда я это делаю, я вижу следующее в KIFвыходные данные:

PASS (0.90s): Tap view with accessibility label "Find Books"
PASS (3.02s): Wait for notification "notificationObjectsLoaded"

, что заставляет меня поверить, что первоначальная проблема заключается в том, что ожидаемое мной уведомление запускается до того, как завершится выполнение первого шага.

Итак, возникает вопрос: почему первый шаг занимает 0,9 секунды?Ожидание завершения модальной анимации, прежде чем она вернется с шага?В этом случае запрос на загрузку объектов выполняется быстрее, чем анимация.

Как с этим обращаться с KIF?Или есть другой подход к загрузке асинхронных данных для моего табличного представления, который был бы более подходящим?

1 Ответ

0 голосов
/ 13 января 2012

Ваше подозрение может быть верным, что уведомление запускается до того, как вы запустите шаг, который его прослушивает, но я замечаю в ваших выходных данных, что шаг следующий .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...