BDD 测试中的 Moya 存根请求

Posted

技术标签:

【中文标题】BDD 测试中的 Moya 存根请求【英文标题】:Moya stub request in BDD tests 【发布时间】:2017-02-02 00:12:57 【问题描述】:

我想在我的Quick/Nimble BDD 测试中发出一个Moya 存根请求。 Moya 有一个我使用 JSON 文件创建的 sampleData 参数:

var sampleData: Data 
    switch self 
    case .getPlaces:
        // Provided that project have a file named get_places.json in it's bundle.
        guard let path = Bundle.main.path(forResource: "get_places", ofType: "json"),
            let data = Data(base64Encoded: path) else 
                return Data()
        
        return data
    case .getPlaceDetail:
        // Provided that project have a file named get_place_detail.json in it's bundle.
        guard let path = Bundle.main.path(forResource: "get_place_detail", ofType: "json"),
            let data = Data(base64Encoded: path) else 
                return Data()
        
        return data
    

如何在测试中使用此参数?在测试中提出Moya 存根请求的任何想法?

谢谢!

【问题讨论】:

【参考方案1】:

只需像在真实代码中一样使用您的提供程序。 Moya 检测到当前目标是测试目标,将返回样本数据而不是执行请求

【讨论】:

我正在尝试编写一个测试来检查来自 getPlaces 请求的响应,但是遵循这两个测试对于此响应都是成功的:testProvider.request(.getPlaces(location: "")) places in expect(places).to(beNil()) testProvider.request(.getPlaces(location: "")) places in expect(places).toNot(beNil()) 。为什么会发生这种情况?我做错了什么? 您是否使用 stubClos​​ure 创建了您的测试提供者?像这样let provider = RxMoyaProvider<YourTargetType>(stubClosure: MoyaProvider.immediatelyStub)【参考方案2】:

如果您仍然有兴趣使用示例数据进行开发(如果后端尚未准备好),您可以通过endpoint 闭包创建 Moya 提供程序,如下所示:

let endpoint =  (target: NetworkApiService) -> Endpoint in
            return Endpoint(url: URL(target: target).absoluteString,
                            sampleResponseClosure:  .networkResponse(200, target.sampleData) ,
                            method: target.method,
                            task: target.task,
                            httpHeaderFields: target.headers)
        
let provider = MoyaProvider<NetworkApiService>(endpointClosure: endpoint, stubClosure: MoyaProvider.immediatelyStub)

它将返回数据,在TargetType 协议的public var sampleData: Data 中指定。

【讨论】:

以上是关于BDD 测试中的 Moya 存根请求的主要内容,如果未能解决你的问题,请参考以下文章

为 Moya 请求编写单元测试

请求规范中的存根身份验证

后台线程中的 moya 请求

swift 框架moya post请求遇到的坑

是否可以在 Xcode 7 自动化 UI 测试中存根 HTTP 请求?

Capybara JavaScript 测试的 XHR 请求存根