Изучение аргумента метода на фиктивном объекте с помощью киви
Мне нужна помощь в следующем: я пишу несколько тестов BDD для клиентского API со следующей структурой:
@protocol MyAPIClientDelegate <NSObject>
-(void)myCallbackMethod:(id)response;
@end
// BEGIN: MyAPIClientSpec.h
SPEC_BEGIN(MyAPIClientSpec)
describe(@"MyAPIClientAPI ", ^{
__block MyAPI *api = nil;
__block id delegateMock = nil;
beforeEach(^{
delegateMock = [KWMock mockForProtocol:@protocol(MyAPIClientDelegate)];
api = [MyAPI APIClientWithDelegate:delegateMock];
});
afterEach(^{
delegateMock = nil;
api = nil;
});
it(@"should return a JSON { result: 'ok', token: <SOME_TOKEN> }", ^{
[[api should] receive:@selector(myMethodCall:)];
[[[delegateMock shouldEventually] receive] myCallbackMethod:any()];
[api myMethodCall];
});
});
SPEC_END
Как вы можете видеть в приведенном выше коде, я использую any(), чтобы проверить, что, по крайней мере, есть параметр, отправленный делегату.
Есть ли способ определить функцию (или блок target-c) для проверки параметра?
Спасибо!
1 ответ
Решение
Попробуйте использовать шпиона захвата:
it(@"should return a JSON { result: 'ok', token: <SOME_TOKEN> }", ^{
[[api should] receive:@selector(myMethodCall:)];
KWCaptureSpy *spy = [delegateMock captureArgument:@selector(myCallbackMethod:) atIndex:0];
[api myMethodCall];
[[spy.argument should] equal:/* ... */];
});