2014-10-29 3 views
3

Я пытаюсь выяснить, есть ли способ проверить макет iOS-представления в модульных тестах при использовании автозапуска. Сейчас я пытаюсь просто инициализировать контроллер представления, а затем проверять рамки просмотров. Тем не менее, кадр на каждом представлении остается источником = (x = 0, y = 0) size = (width = 0, height = 0).Тестирование автозапуска с XCTest

- (void)setUp { 
    [super setUp]; 

    _viewController = [[AddPlayerViewController alloc] init]; 
    _viewController.view.frame = CGRectMake(0, 0, 320, 460); 
    [_viewController view]; 
} 

- (void)testViewsAreInsideWindow { 
    [self checkIfViewIsInsideWindow:_viewController.txtfNewPlayer]; 
    [self checkIfViewIsInsideWindow:_viewController.btnNewPlayer]; 
    [self checkIfViewIsInsideWindow:_viewController.tblPlayers]; 
} 

- (void)checkIfViewIsInsideWindow:(UIView *)view { 
    CGRect windowFrame = _viewController.view.frame; 
    CGRect viewFrame = view.frame; 
    XCTAssertTrue(CGRectContainsRect(windowFrame, viewFrame)); 
} 

Я попытался добавить

[_viewController.view needsUpdateConstraints]; 

или

[_viewController.view updateConstraints]; 

или

[_viewController updateViewConstraints]; 

или

[_viewController viewWillAppear:YES]; 

, но ни один из них не помог.

Возможно ли запустить автозапуск при использовании XCTest?

+0

Вы пробовали 'setNeedsLayout', а затем' layoutIfNeeded'? Вы можете получить макет для запуска в тестах, я делаю это здесь: https://github.com/jrturton/UIView-Autolayout/blob/master/Example/AutoLayoutTests/AutoLayoutConstraintsSpec.m, но у этого нет контроллера вида, просто Просмотры. – jrturton

+0

Это сработало отлично. Спасибо. – Rubberduck

+0

ОК, я добавлю его в качестве ответа – jrturton

ответ

4

Вы пробовали setNeedsLayout, а затем layoutIfNeeded?

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

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