2013-07-02 1 views
0

Я только начал разрабатывать приложение, которое подключается к this URL и получает обменный курс для данной пары валют.Тестирование HTTP с помощью Kiwi/Nocilla

Мне нужно протестировать HTTP-запрос, и я узнал о киви и ноциллах. Тем не менее, я совершенно новичок в любом тестировании, и нет никакой информации о Nocilla, которая может помочь мне начать работу.

Я добавил все NSURLConnectionDataDelegate и NSURLConnectionDelegate методы к ViewController моего одного приложения просмотра, а также данные, извлеченные из URL хранится в @property (strong, nonatomic) NSMutableData *receivedData;. Когда я запускаю программу все работает, как ожидалось, но я не смог пройти тест, который я написал:

SPEC_BEGIN(URLConnectionSpec) 

__block URLConnectionAppDelegate *app_delegate; 
__block URLConnectionViewController *view_controller; 

describe(@"URLConnection", ^{ 
    beforeAll(^{ 
     [[LSNocilla sharedInstance] start]; 

     app_delegate = [[UIApplication sharedApplication] delegate]; 
     [[app_delegate shouldNot] beNil]; 
     view_controller = app_delegate.viewController; 
    }); 

    afterAll(^{ 
     [[LSNocilla sharedInstance] stop]; 
    }); 

    afterEach(^{   
     [[LSNocilla sharedInstance] clearStubs]; 
    }); 

    context(@"When testing", ^{ 
     it(@"should do something", ^{ 
      stubRequest(@"GET", @"http://rate-exchange.appspot.com/currency?from=USD&to=EUR&q=1"); 

      [view_controller beginCommunication]; 

      [[expectFutureValue([NSString stringWithUTF8String:[view_controller.receivedData bytes]]) shouldEventuallyBeforeTimingOutAfter(2)] equal:@"{\"to\": \"EUR\", \"rate\": 0.76610740799999999, \"from\": \"USD\", \"v\": 0.76610740799999999}"]; 
     }); 
    }); 
}); 

SPEC_END 

Я извиняюсь за длинный фрагмент кода.

Тест всегда проваливались с этим сообщением

URLConnection_WhenTesting_ShouldDoSomething] : 'URLConnection, When testing, should do something' [FAILED], expected subject to equal "{"to": "EUR", "rate": 0.76610740799999999, "from": "USD", "v": 0.76610740799999999}", got "" 

Я попытался изменить время даже 10 секунд в надежде, что тест закончен слишком рано, но я получил те же результаты. Я не знаю, почему «receivedData» пуст.

Я был бы очень признателен за любую помощь

+0

Общая структура теста Kiwi выглядит нормально. Вы можете показать код для 'stubRequest'? И вы уверены, что все ваши переменные ('view_controller' и т. Д.) Не ноль? –

+0

Спасибо за ваш ответ. 'stubRequest' является частью [Nocilla] (https://github.com/luisobo/Nocilla), я не реализовал сам. Все переменные в view_controller инициализируются нулем, а 'NSMutableData', который содержит данные, полученные от URL-адреса, инициализируется в' connectionDidFinishLoading: connection'. Однако я не знаю, почему именно при тестировании эта функция или любые другие связанные с ней функции NSURLConnectionDelegate или NSURLConnectionDataDelegate не вызываются. –

+1

Код для 'stubRequest' выглядит довольно разумно, похоже, что он отлично работает с Kiwi, поскольку он просто работает на' LSNocilla sharedInstance'. Не могли бы вы попытаться выполнить отладчик или добавить некоторые инструкции NSLog' в 'beginCommunication'? –

ответ

1

Смотрите обсуждение в комментариях: общая структура теста киви хорошо выглядит, вызов функции Nocilla stubRequest, кажется, не приводит к реакции, что тест ожидает.

Возможно, вы можете использовать andReturnRawResponse для настройки ожидаемых данных ответа. Что-то вроде этого (при условии, что я правильно понял синтаксис Nocilla):

NSData *rawData = ... 
stubRequest(...).andReturnRawResponse(rawData); 
[view_controller beginCommunication]; 
[expectFutureValue([view_controller.receivedData bytes]) 
    shouldEventuallyBeforeTimingOutAfter(2)] equal:rawData.bytes]; 

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

  • Нет связанных вопросов^_^