我正在用AFNetworking 2.0和OHHTTPStubs编写单元测试用例,测试总是失败,错误如下:
响应错误:操作无法完成。(可可错误3840。)。
非常感谢!
下面是简单的测试Json (User.json):{ "userId":"abc","email":"ab@pant.com","username":"usera“}
以及测试用例代码:
- (void)testGet
{
[OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
return YES; // Stub ALL requests without any condition
} withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) {
return [OHHTTPStubsResponse responseWithFileAtPath:OHPathForFileInBundle(@"User.json",nil)
statusCode:200 headers:@{@"Content-Type":@"application/json"}];
}];
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
AFHTTPSessionManager* requestManager = [[AFHTTPSessionManager alloc]initWithBaseURL:[NSURL URLWithString:@"http://test.com"]];
AFJSONResponseSerializer* responseSerializer = [[[AFJSONResponseSerializer alloc]init] autorelease];
responseSerializer.readingOptions = NSJSONReadingAllowFragments;
responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 2)];
requestManager.responseSerializer = responseSerializer;
AFJSONRequestSerializer* requestSerializer = [[AFJSONRequestSerializer alloc] init];
requestSerializer.writingOptions = NSJSONWritingPrettyPrinted;
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
requestManager.requestSerializer = requestSerializer;
_done = NO;
[requestManager GET:@"stream" parameters:nil success:^(NSURLSessionDataTask * task, id JSON)
{
NSLog(@"Response data:%@", JSON);
XCTAssert(JSON != nil, @"null response");
dispatch_semaphore_signal(semaphore);
} failure:^(NSURLSessionDataTask *__unused task, NSError *error) {
NSLog(@"Response error:%@", [error localizedDescription]);
XCTFail(@"fail to get response");
dispatch_semaphore_signal(semaphore);
}];
while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW))
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
}发布于 2016-01-20 21:49:18
请尝试使用AFHTTPResponseSerializer。因此,基本上,替换此代码:
AFJSONResponseSerializer* responseSerializer = [[[AFJSONResponseSerializer alloc]init] autorelease];
responseSerializer.readingOptions = NSJSONReadingAllowFragments;
responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 2)];
requestManager.responseSerializer = responseSerializer;对于这一条:
requestManager.responseSerializer = [AFHTTPResponseSerializer serializer];因为您正在使用@“acceptableContentType /html”的文本,所以我假设您在响应调用时不需要JSON序列化程序。所以这对你的情况应该没问题。
https://stackoverflow.com/questions/19311342
复制相似问题