1

我开始使用 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 应该如何处理?或者是否有不同的方法来为我的 tableview 加载异步数据更合适?

4

1 回答 1

0

您的怀疑可能是正确的,通知是在您运行侦听它的步骤之前触发的,但我在您的输出中注意到该步骤正在成功

在任何情况下,如果您将项目加载到表视图中,您点击其中一个的步骤将等到它们加载超时 - 您可以更改该超时。如果您删除完全等待通知的步骤,您可能会发现您的测试工作正常。

于 2012-01-13T02:39:20.453 回答