gpt4 book ai didi

swift - 无法使用 Alamofire 测试 stub 响应

转载 作者:行者123 更新时间:2023-11-28 07:01:34 25 4
gpt4 key购买 nike

我正在尝试使用 OHHTTPStubs 和 Quick/Nimble 测试对响应 stub 的 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()
})

我在 stub 闭包中添加了一个断点,以确保 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 时有什么问题吗?提前致谢

最佳答案

我遇到了同样的问题。在摸索了两天之后,我想我找到了解决办法。您不能在完成 block 中调用 expect(self.error).toNot(beNil()) ,而是在您的请求代码之后调用它。像这样:

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

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

关于swift - 无法使用 Alamofire 测试 stub 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31891649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com