首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Alamofire测试存根响应

无法使用Alamofire测试存根响应
EN

Stack Overflow用户
提问于 2015-08-08 17:28:04
回答 1查看 908关注 0票数 1

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

我目前的测试代码是:

代码语言:javascript
复制
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执行请求并调用闭包。但是,客户端的响应闭包永远不会被调用,因此测试不会成功运行。这是authenticate方法:

代码语言:javascript
复制
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做错了什么吗?提前感谢

EN

回答 1

Stack Overflow用户

发布于 2015-10-15 04:35:43

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

代码语言:javascript
复制
gitdoRepository.authenticate("http://authenticate.com", completion: { (error) -> () in
                self.error = error
            })
expect(self.error).toEventuallyNot(beNil(), timeout: 3)

当然,你必须声明"error“变量。请尝试一下,如果有效,请让我知道。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31891649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档