我正在尝试使用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执行请求并调用闭包。但是,客户端的响应闭包永远不会被调用,因此测试不会成功运行。这是authenticate方法:
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做错了什么吗?提前感谢
发布于 2015-10-15 04:35:43
我也有同样的问题。在挠头两天之后,我想我找到了解决方案。您不能在完成块中调用expect(self.error).toNot(beNil()),而是在请求代码之后调用它。如下所示:
gitdoRepository.authenticate("http://authenticate.com", completion: { (error) -> () in
self.error = error
})
expect(self.error).toEventuallyNot(beNil(), timeout: 3)当然,你必须声明"error“变量。请尝试一下,如果有效,请让我知道。
https://stackoverflow.com/questions/31891649
复制相似问题