Тестирование HTTP с использованием Kiwi/Nocilla

Я только начал разрабатывать приложение, которое подключается к этому URL и извлекает обменный курс для данной пары валют.

Мне нужно протестировать HTTP-запрос, и в итоге я узнал о Kiwi и Nocilla. Тем не менее, я абсолютно новичок в любом виде тестирования и не так много информации о 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 секунд, надеясь, что тест закончился слишком рано, но я получил те же результаты. Я не знаю, почему "ReceiveData" пусто.

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

1 ответ

Решение

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

Возможно, вы могли бы использовать andReturnRawResponse установить ожидаемые данные ответа. Примерно так (если я правильно понял синтаксис Nocilla):

NSData *rawData = ...
stubRequest(...).andReturnRawResponse(rawData);
[view_controller beginCommunication];
[expectFutureValue([view_controller.receivedData bytes])
  shouldEventuallyBeforeTimingOutAfter(2)] equal:rawData.bytes];
Другие вопросы по тегам