BDD测试中的Moya存根请求

时间:2017-02-02 00:12:58

标签: swift moya quick-nimble

我想在Moya BDD测试中发出Quick/Nimble存根请求。 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存根请求的想法吗?

谢谢!

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:0)

如果您仍然想使用示例数据进行开发(如果尚未准备好后端),则可以通过以下方式创建通过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)

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