2015-08-08 2 views
1

Я пытаюсь протестировать запрос Alamofire, накладывая ответы с помощью 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? Заранее спасибо

ответ

2

У меня была та же проблема. Почесывая голову на два дня, я думаю, что нашел решение. Вы не можете позвонить expect(self.error).toNot(beNil()) в свой блок завершения, но вместо этого просто вызовите его после кода запроса. Как это:

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

Конечно, вы должны объявить «ошибки» переменной. Пожалуйста, попробуйте и дайте мне знать, если это сработает.

Смежные вопросы