Ich bin in einem größeren Projekt, das das Cedar-Framework für Komponententests verwendet. Ich schreibe Komponententests für eine Ansicht, die ein UITableView enthält.So aktualisieren Sie TableViewCells
Initialisierung:
subject = [[ControllerWithTableView alloc] initWithParams:params];
navigationController = [[UINavigationController alloc] initWithRootViewController:subject];
Dann habe ich einige Dinge auf und rufen:
[subject: viewWillAppear:NO];
Im Test I für Zellen bei indexPaths fragen usw. Die Idee dahinter ist, dass es läuft, ohne dass die UI viel Zeit für die Einrichtung hat.
In einigen Tests hatte ich hinzufügen:
[subject.view layoutIfNeeded];
und dann es funktionierte.
Aber im aktuellen Test bin ich ein neues tableViewRow mit der gleichen Methode hinzufügen, die während der Laufzeit aufgerufen wird. Aber ich kann den Test nicht dazu bringen, das UITableView neu zu laden, um die neue Zeile und Zelle zu erstellen und sie zu testen.
Here ist die Verwendung vorgeschlagen:
#define tickRunLoop (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.01, false))
Es funktioniert. Aber manchmal stürzt es ab. Nicht nur, dass ein Test fehlschlägt, sondern auch die Ausführung der Komponententests abgebrochen wird. Alle anderen Tests laufen also nicht bis zum Ende. Ich kann nicht instabilen Code zum Repo des Kunden drücken, so dass das keine Option ist ...
Ich verwende XCode 8.3.3, wenn das relevant ist.
Was kann ich noch tun, um eine Aktualisierung zu erzwingen?