I am currently spying on postNotification
like this
__block KWCaptureSpy *notificationSpy = [[NSNotificationCenter
defaultCenter] captureArgument:@selector(postNotification:) atIndex:0];
The problem is I have multiple notifications with different notification names. How do I access the spy's argument for different notification.
For instance say I have Notification1 and Notification2 the spy argument captures Notification1 but I'm not able to capture the Notification2.
Any ideas of how this can be done?
Two approaches come into my mind:
stub
the sendNotification:
method, and build an array with the sent notifications:
NSMutableArray *sentNotifications = [NSMutableArray array];
[[NSNotificationCenter defaultCenter] stub:@selector(postNotification:) withBlock:^id(NSArray *params) {
NSNotification *notification = params[0];
[sentNotifications addObject:notification.name];
return nil;
}];
[[sentNotifications shouldEventually] equal:@[@"TestNotification1", @"TestNotification2"]];
if the notifications are not always sent in the same order, you might need another matcher then the equal:
one.
write a custom matcher that registers as observer and evaluates when asked about the received notifications:
@interface MyNotificationMatcher : KWMatcher
- (void)sendNotificationNamed:(NSString*)notificationName;
- (void)sendNotificationsNamed:(NSArray*)notificationNames;
@end
which can be used in your tests like this:
[[[NSNotificationCenter defaultCenter] shouldEventually] sendNotificationsNamed:@[@"TestNotification1", @"TestNotification2"]];
As a side note, you don't need to decorate the notifications
variable with __block
, as you don't need to change the content of that variable (i.e. the pointer value).