Cómo probar AFNetworking

* Editar: originalmente quería probar AFNetworking usando Nocilla pero terminé usando OHHTTPStubs para hacer el trabajo. Respondí a la pregunta original a continuación, usando OHHTTPStubs *

Pregunta original:

Quiero probar el APÍCULO de nuestra aplicación: los detalles básicos de uno de los methods que deben probarse se detallan a continuación. Por lo tanto, necesito imitar el HTTPRequestOperationWithRequest: llamada desde AFNetworking . Nocilla parece una opción para hacer esto (más adecuado que OCMock ). Revisé la página github que trata sobre Nocilla y AFNetworking pero no estoy seguro de cómo aplicarlo a mi problema: la syntax no es muy familiar.

  • Entonces, ¿me pregunto si alguien podría darme una pista sobre cómo podría usar Nocilla en este caso?
  • Además, ¿se debe usar Kiwi con Nocilla ?

Gracias por adelantado 🙂

  -(AFHTTPRequestOperation *)getBroadcastsForChannel:(TINChannel *)channel startTime:(NSDate *)date limit:(NSNumber *)limit pastLimit:(NSNumber *)pastLimit fields:(NSArray *)fieldsArray interval:(TINBroadcastsInterval)interval completionBlock:(void (^)(NSArray *broadcasts, NSError *error))block { // Some setup here NSURLRequest *request = [self requestWithMethod:@"GET" path:path parameters:params]; AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { NSError *error; NSDictionary *responseDic = [self parseResponse:responseObject error:&error]; if (error) { if (block) { block([NSArray array], error); } return; } // Parse the response object here if (block) { block([NSArray arrayWithArray:broadcastsOutput], nil); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if (block) { block([NSArray array], error); } }]; [self enqueueHTTPRequestOperation:operation]; return operation; } 

Terminé resolviendo este problema usando otra biblioteca, OHHTTPStubs . Uno puede fácilmente devolver objects simulados a través de AFNetworking , AFNetworking ciertas requestes y variar los times de respuesta / request. Está bien documentado aquí . También aquí está la página github . Un trozo se elimina así:

 [OHHTTPStubs removeStub:stub]; 

Aquí hay un código de ejemplo:

 // A mockJSON file is loaded here NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"sampleJSON18.json"]; NSData* data = [NSData dataWithContentsOfFile:filePath]; NSError* error = nil; id mockJSON = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; //*** stub out AFNetworkingRequestOperation and return custom NSDictionary "mockJSON", in order to see how it is handled id<OHHTTPStubsDescriptor> stub = nil; stub = [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { return [[request.URL path]isEqualToString:@"/v1/epg/packages/59/broadcasts"]; // this means that any request which is equal to the above string is stubbed, return YES to stub *all* requests } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { // The `stubbing` procedure occurs in this block. return [[OHHTTPStubsResponse responseWithJSONObject:mockJSON statusCode:200 headers:nil] requestTime:1.0f responseTime:5.0f]; // one can vary the request/responseTime here }]; stub.name = @"getChannelsWithBroadcastsForDay"; AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { // The response object is now the mockJSON object, ie the original request is stubbed out } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // handle failure } }]; [self enqueueHTTPRequestOperation:operation]; return operation; }