如何在JSON回调中执行奇异果单元测试?

时间:2015-01-10 21:00:48

标签: objective-c unit-testing kiwi

我正在尝试运行一个奇异果测试,它没有评估内部块上的奇异果语句。但它会评估块外的任何测试语句。我该怎么办? :

- (void) jsonTest:(void (^)(NSDictionary *model))jsonData{
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager GET:@"http://api.somesite.com" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        if(jsonData){
            jsonData((NSDictionary *)responseObject);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        jsonData(nil);
    }];
}

describe(@"Networking", ^{
    it(@"Get Sample JSON", ^{


    [[NetworkingUtil alloc] jsonTest:^(NSDictionary *model){

        NSString * result = [model objectForKey:@"Host"];
        NSLog(@"result :: %@", result);

        [[result should] equal: @"host.value.name"];            
    }];

    //kiwi evaluates this test statement though...
    [[theValue(41) should] equal:theValue(42)];
}];

1 个答案:

答案 0 :(得分:1)

您需要使用KWCaptureSpy。

NetworkingUtil *jsonT = [NetworkingUtil alloc];
// We tell the spy what argument to capture.
KWCaptureSpy *spy = [jsonT captureArgument:@selector(jsonTest:) atIndex:0];

[jsonT jsonTest:^(NSDictionary *model){

    NSString * result = [model objectForKey:@"Host"];
    NSLog(@"result :: %@", result);

    [[result should] equal: @"host.value.name"];            
}];

void (^myTestBlock)(NSDictionary *model) = spy.argument;

myTestBlock(dictionary);

您必须创建一个您将通过测试的字典。它对于任何块都是相同的,即使是jsonTest:method中的那个。

当涉及到Kiwi并在块中测试块时,它有点疯狂,但概念是相同的。您捕获具有完成块的方法,捕获您希望测试的块的参数,并将其传递给它所需的对象。