使用Apollo和GraphQL在Swift中进行单元测试的指南第一部分

作为iOS开发人员,我们通常依靠URLSession来为我们的网络层编写单元测试。 鉴于GraphQL和Apollo抽象了我们的网络层并充当了网络资源的黑匣子,我们不能依靠典型的URLSession模拟策略来实现最大的单元测试覆盖率。

让我们使用一个公共的GraphQL API创建一个示例应用程序并编写一些单元测试。 我们的示例应用程序将是一个简单的表格视图主详细信息应用程序,该应用程序列出了仓库的国家/地区,并可以在详细信息页面上加载有关它们的详细信息。

首先,让我们考虑一下如何构造数据。 考虑到母版页仅需要一个国家的几个数据点,而详细信息页将需要更多有关特定国家的数据。 这是使用GraphQL的原因之一,我们实际上可以为单独的用例定义单独的模型。

这种仅获取给定屏幕所需内容的技术可以为我们的应用程序提供性能改进,减少我们的TTI(交互时间)并改善用户体验。

我们将定义一些GraphQL片段来设计模型。

在Swift结构中定义数据模型后,我们应该为这些对象从GraphQL模型中创建可选的初始化器。 这实际上将使解析我们的数据并将其转换为我们服务中的域模型变得简单。 Apollo将所有内容都设为可选everything,因此我们所有的初始化程序都将失败。 您可能知道从GraphQL数据中删除可选性的更好方法,如果需要,请发表评论。

在进行转换以处理可选性时,我们将依靠flatMapcompactMap


最初发布在 gist.github.com上