Невозможно проверить ответы на заглушки с помощью Alamofire
Я пытаюсь протестировать запрос Alamofire, заглушая ответы, используя OHHTTPStubs и Quick/Nimble. Однако 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)
Конечно, вы должны объявить переменную "error". Пожалуйста, попробуйте и дайте мне знать, если это работает.