1

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オブジェクトの配列として識別する必要があるため、これは私の問題を解決しません

4

1 に答える 1

1

お気づきのように、配列が使用されているときに指定したようにキーパスを使用することはできません。2 つの選択肢が考えられます。1 つ目はロング ショットですが、キー パスはcontent.cardList[0].songCard.likes機能しますか?

それ以外の場合は、次の方法を使用することを検討してください。

+ (instancetype)expectationWithSourceKeyPath:(NSString *)sourceKeyPath 
destinationKeyPath:(NSString *)destinationKeyPath 
evaluationBlock:(RKMappingTestExpectationEvaluationBlock)evaluationBlock;

キーパスcontent.cardListを使用し、1) マッピングが単一のオブジェクトを含む配列であることを確認する評価ブロックを提供します。songCard次に、オブジェクトにオブジェクトが含まれており、そのlikes値が 2 であることを確認できます。

于 2013-01-12T13:09:53.753 に答える