iOS测试控制器与Cedar
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS测试控制器与Cedar相关的知识,希望对你有一定的参考价值。
我正在尝试用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);
});
});
答案
单元测试同步运行。任何 - 或可能 - 动画的东西都不能在正常的单元测试中工作,因为测试将在更改发生之前完成。
看起来你正试图在显示视图控制器时测试它的状态。在这种情况下,我们所做的不是推动它,而是加载它:
[model loadViewIfNeeded];
这将从故事板加载视图,然后调用它的-viewDidLoad
。然后,您应该能够测试其状态。
我不使用Cedar,但我确实有一个基于OCUnit的视频控制器测试驱动开发的截屏视频:How to Do 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;
}];
以上是关于iOS测试控制器与Cedar的主要内容,如果未能解决你的问题,请参考以下文章
如何设置 cedar 以对 ios 应用程序进行 bdd 测试?
使用 Cedar 测试presentedViewController 的存在
Heroku cedar 堆栈中 rack-cache 与 Varnish 的缺点?
Heroku(Cedar) + Node + Express + Jade 子目录中的客户端 javascript 文件在本地与 foreman+curl 一起工作,但在推送到 Heroku 时不能