2012-01-12 15 views
0

私はKIFを使い始めており、現在の設定で非同期に読み込まれたテーブルビューをテストすることに問題があります。KIFを使用した非同期UITableViewのテスト

私はボタンで私のアプリにホームスクリーンを持っています。このボタンを押すと、モーダルビューコントローラが表示されます。私がテストを実行すると

+ (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は私のオブジェクトにロード通知を見たことがない:

- (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でテストを持っています。デバッグで

、私は[ObjectManagerのrequestObjects] 3秒後にオブジェクトを要求するための非同期呼び出しと私のviewDidLoadメソッドで呼び出す置き換え:

[[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でどのように処理する必要がありますか?または、より適切なテーブルビューの非同期データを読み込む別の方法がありますか?

答えて

0

あなたの疑惑は正しいかもしれません。あなたがそれを聞くステップを実行する前に通知が発せられていますが、そのステップがに続いてであることがわかりました。

いずれの場合でも、テーブルビューにアイテムをロードすると、そのうちの1つをタップするステップは、タイムアウトがロードされるまで待機し、そのタイムアウトを変更することができます。通知を完全に待つためにステップを削除すると、テストは正常に機能することがあります。

+0

ありがとうございました - 問題のステップが成功しました。私は3秒の待ち時間を追加して読み込みに時間を割いていました。しかし、それは今では無関係です...あなたはまさに正しいのです!行をタップするステップが、テーブルにデータが入力されるまで(タイムアウト内に)待機することはわかりませんでした。私は、テーブルが可視であるのを待つためのステップで通知を待つステップを置き換えました。そして、行がそれをタップするために入力されるまで待って、完全には動作しません。ありがとう、ジム!!! – jmac