Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用OHHTTPStubs模拟时未达到Alamofire响应块_Ios_Swift_Alamofire_Ohhttpstubs - Fatal编程技术网

Ios 使用OHHTTPStubs模拟时未达到Alamofire响应块

Ios 使用OHHTTPStubs模拟时未达到Alamofire响应块,ios,swift,alamofire,ohhttpstubs,Ios,Swift,Alamofire,Ohhttpstubs,当我运行应用程序时,Alamofire响应块到达,没有问题。当运行测试并使用OHttpStubs模拟响应时,会调用两个存根块(请求和响应),但不会调用Alamofire响应块,因此测试失败。 尝试使用URLRequest使用完全相同的存根,响应块称为“无问题” Api类别: private static var config: URLSessionConfiguration? private static var session: SessionManager? static var inst

当我运行应用程序时,Alamofire响应块到达,没有问题。当运行测试并使用OHttpStubs模拟响应时,会调用两个存根块(请求和响应),但不会调用Alamofire响应块,因此测试失败。 尝试使用URLRequest使用完全相同的存根,响应块称为“无问题”

Api类别:

private static var config: URLSessionConfiguration?
private static var session: SessionManager?

static var instance = getInstance()

private static func getInstance() -> Api {
    let api = self.init()
    return api
}

private init() {
    Api.config = URLSession.shared.configuration
    var headers = SessionManager.defaultHTTPHeaders
    headers.removeValue(forKey: "User-Agent")
    headers["User-Agent"] = APP_VERSION
    Api.config?.httpAdditionalHeaders = headers
    Api.session = SessionManager(configuration: Api.config!)
}

func requestFunction(_ path: String) {
    let req = Api.session!.request("\(apiUrl())\(path)", method: .get, parameters: request.toJSON()).response(completionHandler: completionHandler)
}
测试:

信号量永远达不到。但如果我不调用Alamofire,而是这样做,那么信号量就不会出现问题:

    do {
        let request = try URLRequest.init(url: "www.w.com", method: .post)
        let configuration = URLSessionConfiguration.default
        let session = URLSession(configuration: configuration)
        let task = session.dataTask(with: request) { (_, _, _) in
            semaphore.signal()
        }
        task.resume()
    } catch {

    }

不确定您是否在某处调用了
Api.instance
。但是您似乎没有使用
Api
类的共享实例,而是在初始化
private init()
方法中的所有内容

class Api {
    private var config: URLSessionConfiguration?
    private var session: SessionManager?

    static let shared = Api()

    private init() {
        config = URLSession.shared.configuration
        var headers = SessionManager.defaultHTTPHeaders
        headers.removeValue(forKey: "User-Agent")
        headers["User-Agent"] = APP_VERSION
        config?.httpAdditionalHeaders = headers
        session = SessionManager(configuration: Api.config!)
    }

    func requestFunction(_ path: String) {
        let req = session!.request("\(apiUrl())\(path)", method: .get, parameters: request.toJSON()).response(completionHandler: completionHandler)
    }
}
测试应该是

func test() {
    ...

    Api.shard.requestFunction(path, { (_, _) in
        semaphore.signal()
    })

    ...
}

很抱歉我使用的是实例,我只是将其复制到StackOverflow中了错误。什么是
getInstance()
方法?你能在原始问题中添加代码吗?刚刚添加了getInstance方法。感谢您的耐心requestFunction方法没有任何闭包。您确定正在测试()中使用该方法吗?
func test() {
    ...

    Api.shard.requestFunction(path, { (_, _) in
        semaphore.signal()
    })

    ...
}