我正在尝试使用RestKit v0.20运行一些单元测试来测试我的映射,但是我收到的错误是我的目标对象是nil。我已经跟踪了映射失败的事实,因为sourceType是NSArray而我的destinationType是NSNumber。我认为这是因为我的映射键路径不正确。我正在尝试将 songCard JSON映射到我的对象。我在下面包含了我的JSON和映射测试。 很高兴有人可以帮我设置正确的密钥路径。
{"status" : 2000,
"content" : {
"cardList" : [
{
"songCard" : {
"likes" : 2,
"dislikes" : 3
}
}
]
},
"message" : "OK"
}
单元测试类
- (RKObjectMapping *)songMetadataMapping
{
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[SongMetadata class]];
[mapping addAttributeMappingsFromDictionary:@{
@"content.cardList.songCard.likes": @"likes"
}];
return mapping;
}
- (void)testSongMetadataMapping
{
NSString *parsedJSON = [RKTestFixture parsedObjectWithContentsOfFixture:@"songMetadata.json"];
RKMappingTest *test = [RKMappingTest testForMapping:[self songMetadataMapping] sourceObject:parsedJSON destinationObject:nil];
[test addExpectation:[RKPropertyMappingTestExpectation expectationWithSourceKeyPath:@"content.cardList.songCard.likes" destinationKeyPath:@"likes" value:@"2"]];
STAssertTrue([test evaluate], @"Mappings failed");
}
更新 经过进一步的调试后,我发现我的JSON字符串中的值2被评估为NSArray,此时应将其评估为NSNumber。作为一个快速测试,我在我的JSON中删除了[],并且值2被正确地评估为NSNumber。这并不能解决我的问题,因为我需要将我的JSON识别为一组songCard对象
答案 0 :(得分:1)
正如您所注意到的,您无法使用在阵列播放时指定的键路径。我可以想到两个选项 - 第一个是远景,但关键路径content.cardList[0].songCard.likes
是否有效?
否则,请考虑使用以下方法:
+ (instancetype)expectationWithSourceKeyPath:(NSString *)sourceKeyPath
destinationKeyPath:(NSString *)destinationKeyPath
evaluationBlock:(RKMappingTestExpectationEvaluationBlock)evaluationBlock;
使用keypath content.cardList
并提供一个评估块,1)检查映射是否是包含单个对象的数组。然后,您可以检查该对象是否包含songCard
对象,且likes
值为2.