我刚开始使用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永远不会看到我的对象已加载通知。
在调试过程中,我将viewDidLoad方法中的objectManager requestObjects调用替换为一个异步调用,以便在三秒钟后请求对象:
[[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来处理这个问题呢?或者,有没有一种不同的方法来加载我的表视图的异步数据,这样会更合适?
发布于 2012-01-13 10:39:20
您的怀疑可能是正确的,即在您运行侦听它的步骤之前触发了通知,但我在您的输出中注意到该步骤正在成功。
在任何情况下,如果您正在将项目加载到您的表视图中,您点击其中一个项目的步骤将等到它们加载的超时-并且您可以更改该超时。如果您完全删除等待通知的步骤,您可能会发现您的测试运行良好。
https://stackoverflow.com/questions/8842929
复制相似问题