Невозможно проверить ответы на заглушки с помощью 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". Пожалуйста, попробуйте и дайте мне знать, если это работает.

Другие вопросы по тегам