Slide 20
Slide 20 text
実際にどの様な形で取得データが入っているか?
final class CountryListRequestSuccessMock: CountryListRequest {
// MARK: - Function
func getResult() async throws -> GraphQLResult {
// MEMO: Apollo1.x系からはGraphQLで返却されるデータをUnitTest用にマッピングする際には注意が必要(構造が複雑になりがち)
// 一覧データのMock生成時の流れ
// (1) まずDataDict型(第1引数は[String: AnyHashable]型、第2引数は空配列)のデータを作成してレスポンスデータを想定してマッピングをする
// (2) 次にCountriesSchema.GetAllCountriesQuery.Data型のデータを作成してGraphQLResultに入れて返却する
let dataDict = DataDict(
data: [
"countries": [
DataDict(data: ["code": "MY", "name": "Malaysia", "emoji": "🇲🇾 "], fulfilledFragments: []),
DataDict(data: ["code": "TH", "name": "Thailand", "emoji": "🇹🇭 "], fulfilledFragments: []),
DataDict(data: ["code": "MX", "name": "Mexico", "emoji": "🇲🇽 "], fulfilledFragments: []),
DataDict(data: ["code": "JP", "name": "Japan", "emoji": "🇯🇵 "], fulfilledFragments: []),
DataDict(data: ["code": "IN", "name": "India", "emoji": "🇮🇳 "], fulfilledFragments: [])
]
],
fulfilledFragments: []
)
let data = CountriesSchema.GetAllCountriesQuery.Data.init(_dataDict: dataDict)
return GraphQLResult(data: data, extensions: [:], errors: nil, source: .server, dependentKeys: nil)
}
}
query GetAllCountries {
countries {
code
name
emoji
}
}
一覧情報取得
QueryでのStub
[String: AnyHashable]の入れ子構造
👉 構造が複雑だと解析が大変…