2015-01-10 8 views
0

키위 테스트를 실행하려고하는데 내부 블록에있는 키위 문을 평가하지 않습니다. 그러나 블록 밖의 테스트 문을 평가합니다. 나는 무엇을해야합니까? :JSON 콜백 내에서 키위 단위 테스트를 수행하려면 어떻게해야합니까?

당신은 KWCaptureSpy를 사용할 필요가
- (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

.

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 : 메소드 내부의 블록조차도 마찬가지입니다.

키위와 블록을 블록으로 테스트 할 때 약간 미쳐 있지만 개념은 같습니다. 완료 블록이있는 메소드를 캡처하여 테스트하려는 블록 인 인수를 캡처하고 필요한 객체를 전달하십시오.