How do you write first responder unit tests?
I'm trying to write a test to confirm that a method advances focus to the next text field. controller
is a descendant of UIViewController
. But this exploratory test fails:
- (void)testFirstResponder
{
[controller view];
[[controller firstTextField] becomeFirstResponder];
STAssertTrue([[controller firstTextField] isFirstResponder], nil);
}
The first line causes the view to be loaded so that its outlets are in place. The text fields are non-nil. But the test never passes.
I'm guessing that becomeFirstResponder
doesn't set the first responder right away, but schedules it for later. So is there a good way to write a unit test against it?
Pulling up answer from comment in accepted answer… Let things run for a short time:
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]];
I've also found I need to create a UIWindow and drop the view controller's view into it, as stated in the most-upvoted answer.
STAssertTrue
toSTAssertFalse
makes no difference. – Ronna