2013-07-02 64 views
0

我剛開始開發一個應用程序,它連接到this URL並檢索給定貨幣對的匯率交換。使用Kiwi/Nocilla測試HTTP

我需要測試HTTP請求,並最終了解了Kiwi和Nocilla。但是,對於任何類型的測試我都是全新的,並且沒有關於Nocilla的大量信息可以幫助我開始。

我添加所有NSURLConnectionDataDelegateNSURLConnectionDelegate和方法,以我的單一視圖的應用程序的ViewController,並且被存儲在@property (strong, nonatomic) NSMutableData *receivedData;從URL檢索的數據。當我運行程序一切正常,但我一直沒能通過我寫的測試:

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

獼猴桃測試的一般結構看起來沒問題。你可以顯示'stubRequest'的代碼嗎?你確定所有的變量('view_controller'等)都是非零嗎? –

+0

感謝您的回覆。 'stubRequest'是[Nocilla](https://github.com/luisobo/Nocilla)的一部分,我沒有實現自己。 view_controller中的所有變量都初始化爲nil,並且包含從URL接收的數據的'NSMutableData'在'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];