2013-01-22 169 views
0

我想用Cedar测试一个控制器,但不能真正理解为什么它不工作。控制器永远不会显示,viewDidLoad或viewDidAppear永远不会被调用。这是锡达本来不是要做的还是我的错误?Cedar iOS测试控制器

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

回答

3

单元测试同步运行。任何(或可能)动画在正常单元测试中都不起作用,因为测试将在更改发生之前完成。

它看起来像你试图测试你的视图控制器显示时的状态。在这种情况下,我们所做的就是不推,但加载:

[model view]; 

这将从故事板加载的观点,然后调用它的-viewDidLoad。你应该能够测试它的状态。

我不使用雪松,但我有一个视图控制器的测试驱动开发的一个基于的OCUnit-截屏:http://qualitycoding.org/uiviewcontroller-tdd/

(“模型”是控制器的一个非常混乱的名称,由路)

+0

型号名称从雪松来(创建测试模板),但我同意。我会稍后再尝试。谢谢。 – Guu

+0

我的VC测试遇到了麻烦!谢谢! – wolffan

+0

名称'模型'是默认的,旨在被替换为正在测试的实际对象。 – tooluser

0

我通常喜欢设置测试我的视图控制器隔离:

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