我正在尝试运行一个奇异果测试,它没有评估内部块上的奇异果语句。但它会评估块外的任何测试语句。我该怎么办? :
- (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)];
}];
答案 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并在块中测试块时,它有点疯狂,但概念是相同的。您捕获具有完成块的方法,捕获您希望测试的块的参数,并将其传递给它所需的对象。