无法使用 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 和 SwiftyJSON 访问数组内部的 url,JSON 响应