无法使用Alamofire

时间:2015-08-08 09:28:04

标签: swift alamofire ohhttpstubs quick-nimble

我正在尝试使用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 个答案:

答案 0 :(得分:1)

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

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

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