无法使用 Alamofire 测试存根响应

Posted

技术标签:

【中文标题】无法使用 Alamofire 测试存根响应【英文标题】:Cannot test stub responses with Alamofire 【发布时间】:2015-08-08 09:28:04 【问题描述】:

我正在尝试使用 OHHTTPStubs 和 Quick/Nimble 测试 Alamofire 请求存根响应。但是 Alamofire 不处理响应,因此我无法测试结果。

我目前的测试代码是:

OHHTTPStubs.stubRequestsPassingTest($0.URL!.host == "authenticate.com", withStubResponse:  (request: NSURLRequest) -> OHHTTPStubsResponse in
                let obj = ["status": "ok", "data": "something"]
                return OHHTTPStubsResponse(JSONObject: obj, statusCode:200, headers:nil)
            )

            let gitdoRepository: GitdoRepository = GitdoRepository()
            waitUntil(timeout: 2, action:  (done) -> Void in
                gitdoRepository.authenticate("http://authenticate.com", completion:  (error) -> () in
                    expect(error).toNot(beNil())
                )
                NSThread.sleepForTimeInterval(2)
                done()
            )

我在存根闭包中添加了一个断点,以确保 Alamofire 执行请求并调用闭包。然而,客户端的响应闭包永远不会被调用,因此测试不会成功运行。这是验证方法:

func authenticate(authenticationUrl: String, completion: (error: OauthError?) -> ()) 
    Alamofire.request(.POST, authenticationUrl).responseJSON  (request: NSURLRequest?, response: NSHTTPURLResponse?, object: AnyObject?, error: NSError?) -> Void in
        if let error = error 
            completion(error: .HTTPError(error))
        
        else if let object = object 
            if let oauth = self.oauthParser(object) 
                self.oauth = oauth
                completion(error: nil)
            
            else 
                completion(error: .UnparseableCredentials)
            
        
        else 
            completion(error: .ResponseWithoutCredentials)
        
    

Alamofire 有什么问题吗? 提前致谢

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。在挠了两天的头之后,我想我找到了解决方案。 你不能在你的完成块中调用expect(self.error).toNot(beNil()),而是在你的请求代码之后调用它。 像这样:

gitdoRepository.authenticate("http://authenticate.com", completion:  (error) -> () in
                self.error = error
            )
expect(self.error).toEventuallyNot(beNil(), timeout: 3)

当然你必须声明“错误”变量。 请尝试一下,如果可行,请告诉我。

【讨论】:

以上是关于无法使用 Alamofire 测试存根响应的主要内容,如果未能解决你的问题,请参考以下文章

似乎无法使用 Alamofire 获取缓存的响应

无法使用 alamofire 深入了解响应 json。迅速

Alamofire 无法访问 json 响应的键

无法使用 Alamofire 和 SwiftyJSON 访问数组内部的 url,JSON 响应

React Native Jest - 如何使用多个钩子测试功能组件?无法存根 AccessiblityInfo 模块

无法解析响应 alamofire swift 3