I'm having trouble understanding what a practical application of using Kiwi's KWCaptureSpy is. I could do something like this and have it pass:
__block id successJSON;
KWCaptureSpy *successBlockSpy =
[HNKServer captureArgument:@selector(GET:parameters:completion:)
atIndex:2];
[[HNKServer sharedServer] GET:@""
parameters:nil
completion:^(id JSON, NSError *error) {
successJSON = JSON;
}];
HNKServerRequestCallback successBlock = successBlockSpy.argument;
successBlock(@"JSON", nil);
[[successJSON shouldEventually] equal:@"JSON"];
but that doesn't seem to actually be testing anything. The example in Kiwi's documentation doesn't help: https://github.com/kiwi-bdd/Kiwi/wiki/Mocks-and-Stubs#capturing-arguments
Has anyone had a good reason to use KWCaptureSpy in practice?
Here's a possible scenario:
POST /user with the details you want to update.HNKUser class that declares an updateFirstName:lastName: method that calls the webservicefirsName and lastName to the server (e.g. it doesn't also send birthday and other details)Supposing the method in discussion looks like this (I've omitted the completion handlers for simplicity):
- (void)updateFirstName:(NSString*)firstName lastName:(NSString*)lastName {
// preparation code
// ...
[serverApi POST:@"/user" parameters:someParamsYouveBuiltInTheMethod completion:someCompletionHandler];
// ...
}
then you might want to capture the second argument and make sure that it contains only the firstName and lastName fields, and also that those fields have the proper value.
As a note, spies are recommended to be used on mocks, and from your example I think yours is not.