为测试创建Alamofire响应

问题描述 投票:4回答:2

我在我的iOS应用程序中使用Alamofire进行API调用。我试图在测试中存储这些数据,我已经尝试了Mockingjay和OHHTTPStubs但是都没有工作,所以我现在试图将我收到的响应存根。

我需要创建一个带有虚拟数据的响应,我可以将其传递给其他方法。这是Alamofire中Response对象的初始化程序:

public init(request: NSURLRequest?, response: NSHTTPURLResponse?, data: NSData?, result: Result<Value, Error>)

但是我无法弄清楚如何创建这个对象,因为我无法创建一个Result。以下是Alamofire的一些结果类:

public enum Result<Value, Error: ErrorType> {
    case Success(Value)
    case Failure(Error)

    /// Returns `true` if the result is a success, `false` otherwise.
    public var isSuccess: Bool {
        switch self {
        case .Success:
            return true
        case .Failure:
            return false
        }
    }

    /// Returns `true` if the result is a failure, `false` otherwise.
    public var isFailure: Bool {
        return !isSuccess
    }

    /// Returns the associated value if the result is a success, `nil` otherwise.
    public var value: Value? {
        switch self {
        case .Success(let value):
            return value
        case .Failure:
            return nil
        }
    }

    /// Returns the associated error value if the result is a failure, `nil` otherwise.
    public var error: Error? {
        switch self {
        case .Success:
            return nil
        case .Failure(let error):
            return error
        }
    }
}

我似乎无法弄清楚如何将结果传递给带有值的响应对象,以表示API响应。

我觉得我对枚举感到困惑,以及它们如何在变量中加入变量。

任何人都可以帮我建立回应吗?

谢谢。

ANSWERED

感谢您的回答......以下是使用json响应创建整个响应的方法

let london : NSDictionary = ["name" : "london", "latitude" : 23.00, "longitude" : 0.0, "id" : "london_gb"]
                let paris : NSDictionary = ["name" : "paris", "latitude" : 30.00, "longitude" : -1.0, "id" : "paris_fr"]
                let locations = NSArray(array: [london, paris])
                let result = Result<AnyObject, NSError>.Success(locations)

                var response = Response(request: NSURLRequest(), response: NSHTTPURLResponse(), data: NSData(), result: result)
ios swift enums nsurl alamofire
2个回答
7
投票

看下面的例子:

let result = Result<String, NSError>.Success("Hello")

result.isSuccess // prints true
result.value // prints "Hello"

希望有所帮助


0
投票

基础是@ 66o的答案,但更新到Swift 4 / Alamofire 4

import Alamofire
...

let result = Result<Any>.success("Hello")
let dataResponse = DataResponse(request: nil, response: nil, data: nil, result: result)
© www.soinside.com 2019 - 2024. All rights reserved.