Как проверить AFNetworking
* Изменить - я изначально хотел проверить AFNetworking
с помощью Nocilla
но в конечном итоге с помощью OHHTTPStubs
сделать работу. Я ответил на оригинальный вопрос ниже, используя OHHTTPStubs
*
Оригинальный вопрос:
Я хочу протестировать APIClient нашего приложения - основные методы одного из методов, которые необходимо протестировать, подробно описаны ниже. Так что мне нужно подражать HTTPRequestOperationWithRequest:
позвонить с AFNetworking
, Nocilla
кажется, вариант сделать это (более подходящим, чем OCMock
). Я проверил страницу GitHub, которая имеет дело с Nocilla
а также AFNetworking
но я не уверен, как применить это к моей проблеме - синтаксис не очень знаком.
- Так что мне интересно, если кто-то может дать мне подсказку о том, как я мог бы использовать
Nocilla
в этом случае? - Кроме того, один должен использовать
Kiwi
сNocilla
?
Заранее спасибо:)
-(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;
}
1 ответ
Я решил эту проблему, используя другую библиотеку, OHHTTPStubs
, Легко вернуть поддельные объекты через AFNetworking
, заглушить определенные запросы и изменить время ответа / запроса. Это хорошо задокументировано здесь. Также здесь находится страница GitHub. Заглушка удаляется так:
[OHHTTPStubs removeStub:stub];
Вот пример кода:
// 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, i.e. the original request is stubbed out
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// handle failure
}
}];
[self enqueueHTTPRequestOperation:operation];
return operation;
}