Контроллеры iOS для тестирования с Cedar

Я пытаюсь проверить контроллер (ы) с кедром, но не могу понять, почему он не работает. Контроллер никогда не отображается, viewDidLoad или viewDidAppear никогда не вызываются. Это что-то, чего Кедар не должен был делать, или просто моя ошибка?

describe(@"MyController", ^{
    __block UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    __block UINavigationController *root = (UINavigationController *)[[[[UIApplication sharedApplication] delegate]window ]rootViewController];
    __block MyViewController *model = [storyboard instantiateViewControllerWithIdentifier:@"MyController"];

    [root pushViewController:model animated:YES];

    it(@"should test something", ^{
        expect(model.content).to(be_truthy);
    });
});

2 ответа

Решение

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

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

[model view];

Это загрузит представление из раскадровки, а затем вызовет его -viewDidLoad, После этого вы сможете проверить его состояние.

Я не пользуюсь Cedar, но у меня есть скринкаст на основе OCUnit о тестовой разработке контроллера представления: Как сделать UIViewController TDD

(Кстати, "модель" - это очень запутанное имя для контроллера.)

Я обычно тестирую свои контроллеры представления отдельно с установкой как:

beforeEach(^{
            window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
            storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
            subject = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerName"];
            window.rootViewController = subject;
            [window makeKeyAndVisible];
            subject.view should_not be_nil;
}];
Другие вопросы по тегам