Create a gist now

Instantly share code, notes, and snippets.

@kwylez /async-test.m
Last active Dec 18, 2015

quick example of using block property to handle async unit tests for iOS. This assumes you're using SenTest
@property (nonatomic, copy) void (^testForCompletionBlock)(BOOL *testCompleted);
- (void)setUp {
[super setUp];
_testForCompletionBlock = ^(BOOL *testCompleted) {
while (!*testCompleted) {
NSDate *cycle = [NSDate dateWithTimeIntervalSinceNow:0.01];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:cycle];
}
};
}
- (void)test_Delete_All_Bar_Objects {
@try {
__block BOOL testCompleted = NO;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Bar" inManagedObjectContext:_sm_open_Context];
[fetchRequest setEntity:entity];
[_sm_open_Context executeFetchRequest:fetchRequest onSuccess:^(NSArray *results) {
for (id obj in results) {
[_sm_open_Context deleteObject:obj];
[_sm_open_Context saveOnSuccess:^{
} onFailure:^(NSError *error) {
STAssertNil(error, @"There was an error! %@", error);
}];
}
testCompleted = YES;
} onFailure:^(NSError *error) {
testCompleted = YES;
STAssertNil(error, @"Error fetching! %@", error);
}];
_testForCompletionBlock(&testCompleted);
} @catch (NSException * e) {
NSLog(@"test_Delete_All_Bar_Objects failed: %@", [e description]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment