Moya非常谨慎,以确保测试是小菜一碟。 但是,据某些人称,其测试文档有些分散。 因此,我决定写这篇文章,重点是与Moya进行测试。 我将尝试从Moya的文档中收集到的所有问题以及我自己的贡献来回答这里提出的所有问题。 最终,本文可以用作编写更认真的文档的起点¹。 在我们开始之前:我将假设您… 已经知道如何使用Moya。 如果没有,跳进去,很有趣! 有自己的TargetType 。 我将其称为APIService 。 不要指望本文教给您有关测试的知识。 我也不是高手。 知道(或可以理解)XCTest的一些非常基础的知识。 我选择的是……因为™ 。 准备? 存根 如您所知,在创建APIService时,需要为所有目标提供APIService 。 存入电话时将使用此数据。 但是,显然,如果没有您的明确要求,就不会发生这种替换。 您只需要很好地要求: ¹我实际上要敢于在非我的库中编写文档,然后等待有关本文的一些反馈。 我不是很精通它,或者在测试中。 但我渴望提供帮助。 期待着听到您的意见!
莫雅是什么? 为什么呢? Moya是我们想要一些网络抽象层来充分封装实际直接调用Alamofire的层。 它应该足够简单,以使常见的事情变得容易,但是应该足够全面,以使复杂的事情也变得容易。 Moya的出色功能: 编译时检查API端点访问是否正确。 使您可以定义具有关联的枚举值的不同端点的明确用法。 将测试存根视为一流公民,因此单元测试非常容易。 安装 安装部分在Moya的Github页面上描述得非常好。 API 我们将使用JSONPlaceholder作为我们的API。 让我们从模型开始 对于输出模型,我们将使用typealias Codable = Encodable&Decodable 。 使用TargetType创建API枚举 为了使发布尽可能容易,我们将只使用1个POST和2个GET路由。 让我们创建API枚举: 并在其之上添加Moya的必要扩展: 首先, baseURL 。 这用于我们的API的基本URL: 接下来, path 。 我们使用它来定义不同的路由(例如/ posts , / comments等): 接下来, 方法 。 我们可以为不同的func定义不同的方法: 接下来,我们需要样本数据进行测试。 我们不会在那个帖子上介绍这个。 因此,让我们给它一个简单的Data() : 接下来,我们需要定义任务 。 我们需要.requestPlain来获取所有Post 。 .requestParameters用于获取特定的Post 。 最后, .requestJSONEncodable用于使用我们的Codable对象创建一个Post 。 最后,我们需要headers 。 这将与我们的所有请求一起发送: 创建我们的网络代表 […]
我正在使用Moya , Moya_ModelMapper和RxSwift来执行networking请求。 这是我的示例代码: let provider = RxMoyaProvider<MyEndpoint>() let observable: Observable<RegistrationResponse> = provider.request(.register(firstName: "", lastName: "", email: "", password: "")).mapObject(type: RegistrationResponse.self) observable.subscribe { [weak self] (event: Event<RegistrationResponse>) in switch event { case .next(let response): print(response) case .error(let error): print(error) case .completed: break } } 一切工作正常,但我不知道如何得到一个错误代码,当我收到例如从服务器的409状态码响应types。 如果我打印错误,我会得到: jsonMapping(Status Code: 409, Data Length: 0) 但我不知道如何通过代码获取这个状态码。 错误是一个枚举types的MoyaError 。 […]
我发现这个例子如何刷新oauth令牌使用moya和rxswift ,我不得不稍微改变,以编译。 此代码为我的scheme工作80%。 它的问题是,它会运行所有的HTTP错误,而不仅仅是401错误。 我想要的是把所有其他的http错误作为错误传递,以便我可以在别处处理它们,而不是在这里吞下它们。 有了这个代码,如果我得到一个HttpStatus 500 ,它将运行validation码3次,这显然不是我想要的。 我试图改变这个代码来处理只处理401错误,但似乎不pipe我做了什么,我不能得到的代码编译。 它总是抱怨错误的返回types, "Cannot convert return expression of type Observable<Response> to return type Observable<Response>"这对我来说没有任何意义.. 我想要的:处理401,但停止所有其他错误 import RxSwift import KeychainAccess import Moya public extension ObservableType where E == Response { /// Tries to refresh auth token on 401 errors and retry the request. /// If the refresh fails, the […]